1000
It is possible to search for an item ( inside the Editor ), case insensitive

public void init()
{
	COM com_Editor,com_Items;
	anytype var_Editor,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Editor = COM::createFromVariant(exgrid1.Columns().Add("DropDownList")).Editor(); com_Editor = var_Editor;
		com_Editor.EditType(3/*DropDownListType*/);
		com_Editor.AddItem(1,"One");
		com_Editor.AddItem(2,"Two");
		com_Editor.AddItem(3,"Three");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem(exgrid1.Columns().Item(COMVariant::createFromInt(0)).Editor().FindItem(">ONE"));
		com_Items.AddItem(exgrid1.Columns().Item(COMVariant::createFromInt(0)).Editor().FindItem(">ThRee"));
		com_Items.AddItem(exgrid1.Columns().Item(COMVariant::createFromInt(0)).Editor().FindItem("ONE"));
		com_Items.AddItem(exgrid1.Columns().Item(COMVariant::createFromInt(0)).Editor().FindItem(">tWo"));
	exgrid1.EndUpdate();
}
999
The text after the BR-tag is in same line as the text before the BR-tag (entire column)

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.DrawGridLines(1/*exHLines*/);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Default")); com_Column = var_Column;
		com_Column.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
		com_Column.Def(16/*exCellSingleLine*/,COMVariant::createFromBoolean(false));
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("This is the first line.<br>This is the second line.");
		com_Items.AddItem("This is the first line.<br>This is the second line.");
		com_Items.AddItem("This is the first line.<br>This is the second line.");
	exgrid1.EndUpdate();
}
998
The text after the BR-tag is in same line as the text before the BR-tag (individual)

public void init()
{
	COM com_Items;
	anytype var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.DrawGridLines(1/*exHLines*/);
	exgrid1.Columns().Add("Default");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValueFormat(com_Items.AddItem("This is the first line.<br>This is the second line."),COMVariant::createFromInt(0),1/*exHTML*/);
		h = com_Items.AddItem("<b>This is the first line.<br>This is the second line.</b>");
		com_Items.CellValueFormat(h,COMVariant::createFromInt(0),1/*exHTML*/);
		com_Items.CellSingleLine(h,COMVariant::createFromInt(0),false);
		com_Items.CellValueFormat(com_Items.AddItem("This is the first line.<br>This is the second line."),COMVariant::createFromInt(0),1/*exHTML*/);
	exgrid1.EndUpdate();
}
997
Can I disable an item once the user selects a new value into a different item

// Change event - Occurs when the user changes the cell's content.
void onEvent_Change(int   _Item,int   _ColIndex,COMVariant /*variant*/   _NewValue)
{
	COM com_Items;
	anytype var_Items;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.EnableItem(com_Items.ItemByIndex(1),_NewValue);
}

public void init()
{
	COM com_Editor,com_Items;
	anytype var_Editor,var_Items;
	int h1,h2;
	;

	super();

	exgrid1.FreezeEvents(true);
	exgrid1.BeginUpdate();
	exgrid1.ScrollBySingleLine(true);
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	exgrid1.Columns().Add("Q");
	exgrid1.Columns().Add("A");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h1 = com_Items.AddItem("What's your gender?");
		var_Editor = com_Items.CellEditor(h1,COMVariant::createFromInt(1)); com_Editor = var_Editor;
			com_Editor.EditType(3/*DropDownListType*/);
			com_Editor.AddItem(1,"Male");
			com_Editor.AddItem(0,"Female");
		com_Items.CellValue(h1,COMVariant::createFromInt(1),COMVariant::createFromInt(1));
		h2 = com_Items.AddItem("What's pet name?");
		com_Items.CellValue(h2,COMVariant::createFromInt(1),"This is my pet favorite long long long name, that shoul break the line in multiple pieces");
		com_Items.CellSingleLine(h2,COMVariant::createFromInt(1),false);
	exgrid1.EndUpdate();
	exgrid1.FreezeEvents(false);
}
996
How can I get a row expanded / enlarged to fit the cell's text (entire column)

public void init()
{
	COM com_Column,com_Editor,com_Items;
	anytype var_Column,var_Editor,var_Items;
	int h1,h2;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ScrollBySingleLine(true);
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	exgrid1.Columns().Add("Q");
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("A")); com_Column = var_Column;
		com_Column.Def(16/*exCellSingleLine*/,COMVariant::createFromBoolean(false));
		var_Editor = com_Column.Editor(); com_Editor = var_Editor;
			com_Editor.EditType(5/*MemoType*/);
			com_Editor.Appearance(8/*SingleApp*/);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h1 = com_Items.AddItem("What's name?");
		com_Items.CellValue(h1,COMVariant::createFromInt(1),"This is my pet favorite long long long name, that shoul break the line in multiple pieces");
		h2 = com_Items.AddItem("What's your pet name?");
		com_Items.CellValue(h2,COMVariant::createFromInt(1),"This is my pet favorite long long long name, that shoul break the line in multiple pieces");
	exgrid1.EndUpdate();
}
995
How can I get a row expanded / enlarged to fit the cell's text (individual cell)

public void init()
{
	COM com_Editor,com_Items;
	anytype var_Editor,var_Items;
	int h1,h2;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ScrollBySingleLine(true);
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	exgrid1.Columns().Add("Q");
	exgrid1.Columns().Add("A");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h1 = com_Items.AddItem("What's name?");
		com_Items.CellValue(h1,COMVariant::createFromInt(1),"This is my pet favorite long long long name, that shoul break the line in multiple pieces");
		h2 = com_Items.AddItem("What's your pet name?");
		var_Editor = com_Items.CellEditor(h2,COMVariant::createFromInt(1)); com_Editor = var_Editor;
			com_Editor.EditType(5/*MemoType*/);
			com_Editor.Appearance(8/*SingleApp*/);
		com_Items.CellValue(h2,COMVariant::createFromInt(1),"This is my pet favorite long long long name, that shoul break the line in multiple pieces");
		com_Items.CellSingleLine(h2,COMVariant::createFromInt(1),false);
	exgrid1.EndUpdate();
}
994
InsertControlItem / UserEditor / A2X:

public void init()
{
	COM com_ConditionalFormat,com_Items;
	anytype var_ConditionalFormat,var_Items;
	int h,hX;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.BackColor(WinApi::RGB2int(240,240,240));
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("1 = 1"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.Bold(true);
	COM::createFromVariant(exgrid1.Columns().Add("Type")).Alignment(2/*RightAlignment*/);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("1. A ProgID such as \"MSCAL.Calendar.7\"");
		com_Items.ItemDivider(h,0);
		hX = com_Items.InsertControlItem(0,"MSCAL.Calendar","");
		COM::createFromVariant(com_Items.ItemObject(hX)).BackColor(WinApi::RGB2int(255,255,255));
		h = com_Items.AddItem("2. A CLSID such as \"{0036F83C-D892-4B7B-AA0B-BEDD8D16A738}\"");
		com_Items.ItemDivider(h,0);
		hX = com_Items.InsertControlItem(0,"{0036F83C-D892-4B7B-AA0B-BEDD8D16A738}","");
		h = com_Items.AddItem("3. A URL such as \"http://www.exontrol.com\"");
		com_Items.ItemDivider(h,0);
		hX = com_Items.InsertControlItem(0,"http://www.exontrol.com","");
		h = com_Items.AddItem("4. A reference to an Active document such as \"file://\\\\Documents\\MyDoc.doc\"");
		com_Items.ItemDivider(h,0);
		hX = com_Items.InsertControlItem(0,"file://C:\\empesting.xml","");
		h = com_Items.AddItem("5.A fragment of HTML such as \"MSHTML:<HTML><BODY>This is a line of text</BODY></HTML>\"");
		com_Items.ItemDivider(h,0);
		hX = com_Items.InsertControlItem(0,"MSHTML:<HTML><BODY>This is a <b>line of</b> text</BODY></HTML>","");
		com_Items.ItemHeight(hX,56);
		h = com_Items.AddItem("6.Anything, if it is preffixed by \"A2X:\"");
		com_Items.ItemDivider(h,0);
		hX = com_Items.InsertControlItem(0,"A2X:TOC24.Toc24Ctrl.1","");
	exgrid1.EndUpdate();
}
993
How do I add a RichTextBox editor
// UserEditorOleEvent event - Occurs when an user editor fires an event.
void onEvent_UserEditorOleEvent(COM   _Object,COM   _Ev,COMVariant /*bool*/   _CloseEditor,int   _Item,int   _ColIndex)
{
	;
	print( _Ev );
}

public void init()
{
	COM com_Editor,com_Items,com_RichTextBox;
	anytype var_Editor,var_Items,var_RichTextBox;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.DrawGridLines(-1/*exAllLines*/);
	exgrid1.DefaultItemHeight(32);
	var_Editor = COM::createFromVariant(exgrid1.Columns().Add("RICHTEXT")).Editor(); com_Editor = var_Editor;
		com_Editor.EditType(16/*UserEditorType*/);
		com_Editor.UserEditor("RICHTEXT.RichtextCtrl","");
		// Add 'Microsoft Rich Textbox Control 6.0 (SP4)(richtx32.ocx)' reference to your project.
		var_RichTextBox = com_Editor.UserEditorObject(); com_RichTextBox = var_RichTextBox;
			com_RichTextBox.AutoVerbMenu(true);
			com_RichTextBox.TextRTF("{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\f0\\pard\\r\\nThis is some {\\b bold} text.\\par\\r\\n}");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("RICHTEXT.RichtextCtrl");
	exgrid1.EndUpdate();
}
992
Is it possible to trap a double-click event on a specific cell and when that happens, to set the cell to a specific value
// DblClick event - Occurs when the user dblclk the left mouse button over an object.
void onEvent_DblClick(int   _Shift,int   _X,int   _Y)
{
	int h;
	;
	h = exgrid1.ItemFromPoint(-1,-1,c,hit);
	print( exgrid1.Items().CellValue(h,c) );
}

public void init()
{
	COM com_Items;
	anytype var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HeaderAppearance(4/*Etched*/);
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	exgrid1.Columns().Add("C1");
	exgrid1.Columns().Add("C2");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem("Item 1"),COMVariant::createFromInt(1),"Item 2");
		com_Items.CellValue(com_Items.AddItem("Item 3"),COMVariant::createFromInt(1),"Item 4");
		com_Items.CellValue(com_Items.AddItem("Item 5"),COMVariant::createFromInt(1),"Item 6");
	exgrid1.EndUpdate();
}
991
How can I display dates in DD/MM/YYYY format

public void init()
{
	COM com_Items;
	anytype var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ScrollBySingleLine(false);
	exgrid1.Columns().Add("Date");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.ItemDivider(com_Items.AddItem("Different Date Formats"),0);
		com_Items.FormatCell(com_Items.AddItem(COMVariant::createFromDate(str2Date("12/1/1971",213))),COMVariant::createFromInt(0),"((shortdateF(value) mid 4) left 2) + `/` + (shortdateF (value) left 2) + `/` + (shortdateF (value) right 4)");
		com_Items.FormatCell(com_Items.AddItem(COMVariant::createFromDate(str2Date("12/1/1971",213))),COMVariant::createFromInt(0),"(1 array (0:=(shortdateF(value) split `/`))) + `/` + (0 array (=:0) ) + `/` + (2 array (=:0) )");
		com_Items.FormatCell(com_Items.AddItem(COMVariant::createFromDate(str2Date("12/1/1971",213))),COMVariant::createFromInt(0),"((`0` + day(value) ) right 2) + `/` + ((`0` + month(value) ) right 2) + `/` + year(value)");
		com_Items.FormatCell(com_Items.AddItem(COMVariant::createFromDate(str2Date("12/1/1971",213))),COMVariant::createFromInt(0),"day(value) + `/` + month(value) + `/` + year(value)");
		com_Items.FormatCell(com_Items.AddItem(COMVariant::createFromDate(str2Date("12/1/1971",213))),COMVariant::createFromInt(0),"year(value) + ` - ` + day(value) + ` - ` + month(value)");
		h = com_Items.AddItem(COMVariant::createFromDate(str2Date("12/1/1971",213)));
		com_Items.ItemHeight(h,24);
		com_Items.CellValueFormat(h,COMVariant::createFromInt(0),1/*exHTML*/);
		com_Items.FormatCell(h,COMVariant::createFromInt(0),"`<b>` + year(value) + `</b><off -4> ` + day(value) + ` - ` + month(value)");
		com_Items.ItemDivider(com_Items.AddItem("Predefined Date Formats"),0);
		com_Items.FormatCell(com_Items.AddItem(COMVariant::createFromDate(str2Date("12/1/1971",213))),COMVariant::createFromInt(0),"value");
		com_Items.FormatCell(com_Items.AddItem(COMVariant::createFromDate(str2Date("12/1/1971",213))),COMVariant::createFromInt(0),"shortdateF(value)");
		com_Items.FormatCell(com_Items.AddItem(COMVariant::createFromDate(str2Date("12/1/1971",213))),COMVariant::createFromInt(0),"shortdate(value)");
		com_Items.FormatCell(com_Items.AddItem(COMVariant::createFromDate(str2Date("12/1/1971",213))),COMVariant::createFromInt(0),"longdate(value)");
	exgrid1.EndUpdate();
}
990
I have noticed that the column gets resized once I release the mouse. I have a column that displays multiple-lines cells, and the text gets wrapped only when user releases the mouse. Is it possible to get resized contiguously as I had before
public void init()
{
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ScrollBySingleLine(false);
	exgrid1.DrawGridLines(2/*exVLines*/);
	exgrid1.ColumnsAllowSizing(true);
	COM::createFromVariant(exgrid1.Columns().Add("Column A (cont)")).Def(64/*exColumnResizeContiguously*/,COMVariant::createFromBoolean(true));
	exgrid1.Columns().Add("Column 1");
	COM::createFromVariant(exgrid1.Columns().Add("Column B (cont)")).Def(64/*exColumnResizeContiguously*/,COMVariant::createFromBoolean(true));
	exgrid1.Columns().Add("Column 2");
	exgrid1.EndUpdate();
}
989
How do I get the column from cursor, when it hovers the empty portion of the items section
// MouseMove event - Occurs when the user moves the mouse.
void onEvent_MouseMove(int   _Button,int   _Shift,int   _X,int   _Y)
{
	int i;
	;
	i = exgrid1.ItemFromPoint(0,-1,c,hit);
	print( "Column" );
	print( c );
}

public void init()
{
	int i;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.DrawGridLines(2/*exVLines*/);
	exgrid1.Columns().Add("Column 0");
	exgrid1.Columns().Add("Column 1");
	exgrid1.Columns().Add("Column 2");
	exgrid1.EndUpdate();
}
988
How do I add items once the user clicks the empty area
// Click event - Occurs when the user presses and then releases the left mouse button over the grid control.
void onEvent_Click()
{
	COM com_Items;
	anytype var_Items;
	int i;
	;
	i = exgrid1.ItemFromPoint(0,-1,c,hit);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem(i),COMVariant::createFromInt(1),c);
}

public void init()
{
	COM com_Items;
	anytype var_Items;
	int i;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.Columns().Add("Number of Items to Add");
	exgrid1.Columns().Add("Click on Column");
	exgrid1.EndUpdate();
}
987
Is there any option to stop events
// AddItem event - Occurs after a new Item has been inserted to Items collection.
void onEvent_AddItem(int   _Item)
{
	;
	print( "AddItem event is fired only if FreezeEvents(False) is called" );
}

public void init()
{
	COM com_Items;
	anytype var_Items;
	int h1,h2;
	;

	super();

	exgrid1.FreezeEvents(true);
	exgrid1.BeginUpdate();
	exgrid1.DefaultItemHeight(24);
	exgrid1.Columns().Add("Task");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h1 = com_Items.AddItem("Task 1");
		h2 = com_Items.AddItem("Task 2");
	exgrid1.EndUpdate();
	exgrid1.FreezeEvents(false);
}
986
How can I include the child items, when a filter is applied

public void init()
{
	COM com_Columns,com_Items;
	anytype var_Columns,var_Items;
	int h0;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(true);
	exgrid1.ContinueColumnScroll(0);
	exgrid1.MarkSearchColumn(false);
	exgrid1.SearchColumnIndex(1);
	exgrid1.Indent(16);
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	exgrid1.FilterBarPromptVisible(1/*exFilterBarPromptVisible*/);
	exgrid1.FilterBarPromptPattern("Nancy");
	exgrid1.FilterInclude(1/*exItemsWithChilds*/);
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		COM::createFromVariant(com_Columns.Add("Name")).Width(96);
		COM::createFromVariant(com_Columns.Add("Title")).Width(96);
		com_Columns.Add("City");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h0 = com_Items.AddItem("Nancy Davolio");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Representative");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"Seattle");
		h0 = com_Items.InsertItem(h0,,"Andrew Fuller");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Vice President, Sales");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"Tacoma");
		h0 = com_Items.InsertItem(h0,,"Michael Suyama");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Representative");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"London");
		h0 = com_Items.AddItem("Janet Leverling");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Representative");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"Kirkland");
		h0 = com_Items.InsertItem(h0,,"Margaret Peacock");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Representative");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"Redmond");
		com_Items.ExpandItem(0,true);
	exgrid1.ApplyFilter();
	exgrid1.EndUpdate();
}
985
How do I prevent changing the cell's state ( check-box state )
// CellStateChanging event - Fired before cell's state is about to be changed.
void onEvent_CellStateChanging(int   _Item,int   _ColIndex,COMVariant /*long*/   _NewState)
{
	COM com_Items;
	anytype var_Items;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		_NewState = com_Items.CellState(_Item,_ColIndex);
}

public void init()
{
	COM com_Column,com_Column1,com_Items;
	anytype var_Column,var_Column1,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("P1")); com_Column = var_Column;
		com_Column.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
		com_Column.PartialCheck(true);
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("P2")); com_Column1 = var_Column1;
		com_Column1.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
		com_Column1.PartialCheck(true);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(h,,"Child 1");
		com_Items.InsertItem(h,,"Child 2");
		com_Items.ExpandItem(h,true);
	exgrid1.EndUpdate();
}
984
How do I get sorted the column as string, numeric, date, date and time. Also how can it be applied to drop down filter panel

public void init()
{
	COM com_Column,com_Column1,com_Column2,com_Column3,com_Column4,com_Column5,com_Items;
	anytype var_Column,var_Column1,var_Column2,var_Column3,var_Column4,var_Column5,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Date")); com_Column = var_Column;
		com_Column.SortType(2/*SortDate*/);
		com_Column.DisplayFilterButton(true);
		com_Column.DisplayFilterPattern(false);
		com_Column.DisplayFilterDate(true);
		com_Column.FilterList(1296/*exShowFocusItem | exShowCheckBox | exSortItemsDesc*/);
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("DateTime")); com_Column1 = var_Column1;
		com_Column1.SortType(3/*SortDateTime*/);
		com_Column1.DisplayFilterButton(true);
		com_Column1.DisplayFilterPattern(false);
		com_Column1.FilterList(1296/*exShowFocusItem | exShowCheckBox | exSortItemsDesc*/);
	var_Column2 = COM::createFromVariant(exgrid1.Columns().Add("Time")); com_Column2 = var_Column2;
		com_Column2.SortType(4/*SortTime*/);
		com_Column2.DisplayFilterButton(true);
		com_Column2.DisplayFilterPattern(false);
		com_Column2.FilterList(1296/*exShowFocusItem | exShowCheckBox | exSortItemsDesc*/);
		com_Column2.FormatColumn("time(value)");
	var_Column3 = COM::createFromVariant(exgrid1.Columns().Add("Numeric")); com_Column3 = var_Column3;
		com_Column3.SortType(1/*SortNumeric*/);
		com_Column3.DisplayFilterButton(true);
		com_Column3.FilterList(1296/*exShowFocusItem | exShowCheckBox | exSortItemsDesc*/);
	var_Column4 = COM::createFromVariant(exgrid1.Columns().Add("String")); com_Column4 = var_Column4;
		com_Column4.DisplayFilterButton(true);
		com_Column4.FilterList(1296/*exShowFocusItem | exShowCheckBox | exSortItemsDesc*/);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem(COMVariant::createFromDate(str2Date("1/27/2010",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromUtcDateTime(str2Datetime("1/27/2010 10:00:00",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(2),com_Items.CellValue(h,COMVariant::createFromInt(1)));
		com_Items.CellValue(h,COMVariant::createFromInt(3),COMVariant::createFromInt(1));
		com_Items.CellValue(h,COMVariant::createFromInt(4),com_Items.CellValue(h,COMVariant::createFromInt(3)));
		h = com_Items.AddItem(COMVariant::createFromDate(str2Date("1/27/2011",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromUtcDateTime(str2Datetime("1/27/2011 9:00:00",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(2),com_Items.CellValue(h,COMVariant::createFromInt(1)));
		com_Items.CellValue(h,COMVariant::createFromInt(3),COMVariant::createFromInt(11));
		com_Items.CellValue(h,COMVariant::createFromInt(4),com_Items.CellValue(h,COMVariant::createFromInt(3)));
		h = com_Items.AddItem(COMVariant::createFromDate(str2Date("11/2/2010",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromUtcDateTime(str2Datetime("11/2/2010 9:00:00",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(2),com_Items.CellValue(h,COMVariant::createFromInt(1)));
		com_Items.CellValue(h,COMVariant::createFromInt(3),COMVariant::createFromInt(2));
		com_Items.CellValue(h,COMVariant::createFromInt(4),com_Items.CellValue(h,COMVariant::createFromInt(3)));
	var_Column5 = COM::createFromObject(exgrid1.Columns()).Item("DateTime"); com_Column5 = var_Column5;
	com_Column5.DisplayFilterDate(false);
	exgrid1.EndUpdate();
}
983
I am using Layout property to sort multiple columns at once. The problem is that all items get expanded. How do I prevent that

public void init()
{
	COM com_Column,com_Column1,com_Items;
	anytype var_Column,var_Column1,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("P1")); com_Column = var_Column;
		com_Column.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
		com_Column.PartialCheck(true);
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("P2")); com_Column1 = var_Column1;
		com_Column1.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
		com_Column1.PartialCheck(true);
		com_Column1.FormatColumn("1 index ``");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(h,,"Child A");
		com_Items.InsertItem(h,,"Child B");
		com_Items.InsertItem(h,,"Child A");
		com_Items.InsertItem(h,,"Child B");
		com_Items.AddItem("Root");
		com_Items.AddItem("Root");
	exgrid1.SingleSort(false);
	exgrid1.Layout("multiplesort=\"C0:1 C1:2\";collapse=\"\"");
	exgrid1.EndUpdate();
}
982
How do I find the cell's type, or what the cell holds

public void init()
{
	COM com_Columns,com_Items;
	anytype var_Columns,var_Items;
	str var_s;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		COM::createFromVariant(com_Columns.Add("Value")).Width(24);
		COM::createFromVariant(com_Columns.Add("Type")).FormatColumn("type(%0)");
		var_s = "(0 := type(%0)) array (`empty`, `null`, `short`, `long`, `float`, `double`, `currency`, `date`, `string`, `object`, `error`, `bo";
		var_s = var_s + "olean`, `variant`, `any`, `reserved`, `decimal`, `char`, `byte`, `unsigned short`, `unsigned long`, `long on 64 bits`)";
		COM::createFromVariant(com_Columns.Add("TypeAsString")).FormatColumn(var_s);
		COM::createFromVariant(com_Columns.Add("Length")).FormatColumn("len(%0)");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem();
		com_Items.AddItem("");
		com_Items.CellValue(.AddItem(),COMVariant::createFromInt(0),COM::createFromVariant(exgrid1));
		com_Items.CellValue(com_Items.AddItem(),COMVariant::createFromInt(0),COMVariant::createFromBoolean(true));
		com_Items.CellValue(com_Items.AddItem(),COMVariant::createFromInt(0),COMVariant::createFromInt(-1));
		com_Items.CellValue(com_Items.AddItem(),COMVariant::createFromInt(0),COMVariant::createFromInt(-1));
		com_Items.CellValue(com_Items.AddItem(),COMVariant::createFromInt(0),COMVariant::createFromDate(str2Date("1/1/2001",213)));
	exgrid1.EndUpdate();
}
981
How can I get ride / hide the image being dragged by OLE Drag and Drop
// OLEStartDrag event is not supported. Use the DragEnter,DragLeave,DragOver, DragDrop ... events.
public void init()
{
	COM com_Items;
	anytype var_Items;
	int h;
	;

	super();

	exgrid1.OLEDropMode(1/*exOLEDropManual*/);
	exgrid1.Background(34/*exDragDropAfter*/,WinApi::RGB2int(255,255,255));
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	exgrid1.Columns().Add("Default");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(h,,"Child 1");
		com_Items.InsertItem(h,,"Child 2");
		com_Items.ExpandItem(h,true);
}
980
The ReadOnly property does not prevent changing the column's check-box (sample 2)

public void init()
{
	COM com_Column,com_Column1,com_Editor,com_Items;
	anytype var_Column,var_Column1,var_Editor,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ShowFocusRect(false);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("C1")); com_Column = var_Column;
		com_Column.AllowSizing(false);
		com_Column.Width(18);
		var_Editor = COM::createFromObject(com_Column.Editor()); com_Editor = var_Editor;
		com_Editor.EditType(19/*CheckValueType*/);
	exgrid1.Columns().Add("C2");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem(COMVariant::createFromInt(0)),COMVariant::createFromInt(1),"Item 1");
		com_Items.CellValue(com_Items.AddItem(COMVariant::createFromInt(-1)),COMVariant::createFromInt(1),"Item 2");
		com_Items.CellValue(com_Items.AddItem(COMVariant::createFromInt(0)),COMVariant::createFromInt(1),"Item 3");
	exgrid1.ReadOnly(true);
	var_Column1 = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(0)); com_Column1 = var_Column1;
	var_Editor = COM::createFromObject(com_Column1).Editor(); com_Editor = var_Editor;
	com_Editor.Option(17/*exCheckValue2*/,COMVariant::createFromInt(2));
	exgrid1.EndUpdate();
}
979
The ReadOnly property does not prevent changing the column's check-box (sample 1)

public void init()
{
	COM com_Column,com_Editor,com_Items;
	anytype var_Column,var_Editor,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ShowFocusRect(false);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("C1")); com_Column = var_Column;
		com_Column.AllowSizing(false);
		com_Column.Width(18);
		var_Editor = com_Column.Editor(); com_Editor = var_Editor;
			com_Editor.EditType(19/*CheckValueType*/);
			com_Editor.Option(17/*exCheckValue2*/,COMVariant::createFromInt(1));
	exgrid1.Columns().Add("C2");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem(COMVariant::createFromInt(0)),COMVariant::createFromInt(1),"Item 1");
		com_Items.CellValue(com_Items.AddItem(COMVariant::createFromInt(-1)),COMVariant::createFromInt(1),"Item 2");
		com_Items.CellValue(com_Items.AddItem(COMVariant::createFromInt(0)),COMVariant::createFromInt(1),"Item 3");
	exgrid1.ReadOnly(true);
	exgrid1.EndUpdate();
}
978
How can I export checked items only

public void init()
{
	COM com_Columns,com_Items;
	anytype var_Columns,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		COM::createFromVariant(com_Columns.Add("C1")).Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
		COM::createFromVariant(com_Columns.Add("C2")).FormatColumn("1 index `A-Z`");
		COM::createFromVariant(com_Columns.Add("C3")).FormatColumn("100 index ``");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("Item 1");
		com_Items.CellState(com_Items.AddItem("Item 2"),1);
		com_Items.CellState(com_Items.AddItem("Item 3"),1);
	exgrid1.EndUpdate();
	print( "Export CSV Checked Items Only:" );
	print( exgrid1.Export("","chk") );
}
977
How can I export a hidden column

public void init()
{
	COM com_Column,com_Column1,com_Columns,com_Items;
	anytype var_Column,var_Column1,var_Columns,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		com_Columns.Add("C1");
		var_Column = COM::createFromVariant(com_Columns.Add("C2")); com_Column = var_Column;
			com_Column.FormatColumn("1 index `A-Z`");
			com_Column.Visible(false);
		var_Column1 = COM::createFromVariant(com_Columns.Add("C3")); com_Column1 = var_Column1;
			com_Column1.FormatColumn("100 index ``");
			com_Column1.Visible(false);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("Item 1");
		com_Items.AddItem("Item 2");
		com_Items.AddItem("Item 3");
	exgrid1.EndUpdate();
	print( "Export CSV Hidden Columns (1,2):" );
	print( exgrid1.Export("","|1,2") );
}
976
I'm trying to use automatic numbering of the outline. How can I have A, B, C for root items, 1, 2, 3 for the sub-items, and a, b, c for sub-sub-items (sample 3)

public void init()
{
	COM com_Column,com_Columns,com_Items;
	anytype var_Column,var_Columns,var_Items;
	int h,hChild;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	exgrid1.AutoDrag(3/*exAutoDragPositionAny*/);
	exgrid1.HasLines(1/*exSolidLine*/);
	exgrid1.Indent(16);
	exgrid1.MarkSearchColumn(false);
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		var_Column = COM::createFromVariant(com_Columns.Add("")); com_Column = var_Column;
			com_Column.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
			com_Column.FormatColumn("((1:=(0 :=(1 rpos '.|A-Z||a-z|')) rfind `.`) < 0 ? `<b>` + =:0 + `` :  (=:0 mid (1 + 1 + =:1) )  + `)` ) + ` ` + value");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(h,,"Child");
		hChild = com_Items.InsertItem(h,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(h,,"Child");
		com_Items.ExpandItem(0,true);
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(h,,"Child");
		hChild = com_Items.InsertItem(h,,"Child");
		com_Items.CellState(hChild,COMVariant::createFromInt(0),1);
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(h,,"Child");
	exgrid1.EndUpdate();
}
975
I'm trying to use automatic numbering of the outline. How can I have A, B, C for root items, 1, 2, 3 for the sub-items, and a, b, c for sub-sub-items (sample 2)

public void init()
{
	COM com_Column,com_Columns,com_Items;
	anytype var_Column,var_Columns,var_Items;
	int h,hChild;
	str var_s;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	exgrid1.GridLineColor(WinApi::RGB2int(190,190,190));
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	exgrid1.AutoDrag(3/*exAutoDragPositionAny*/);
	exgrid1.HasLines(1/*exSolidLine*/);
	exgrid1.Indent(16);
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		com_Columns.Add("Default");
		var_Column = COM::createFromVariant(com_Columns.Add("")); com_Column = var_Column;
			com_Column.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
			com_Column.Def(49/*exCellPaddingRight*/,COMVariant::createFromInt(4));
			com_Column.AllowSizing(false);
			com_Column.Width(36);
			com_Column.Position(0);
			var_s = "(1:=(0 :=(1 rpos '.|A-Z||a-z|')) rfind `.`) < 0 ? `<b>` + =:0 : (`............` left 2 * (=:0 count `.`)) + (=:0 mid (1 + 1 + =:";
			var_s = var_s + "1) ) ";
			com_Column.FormatColumn(var_s);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(h,,"Child");
		hChild = com_Items.InsertItem(h,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(h,,"Child");
		com_Items.ExpandItem(0,true);
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(h,,"Child");
		hChild = com_Items.InsertItem(h,,"Child");
		com_Items.CellState(hChild,COMVariant::createFromInt(0),1);
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(h,,"Child");
	exgrid1.EndUpdate();
}
974
I'm trying to use automatic numbering of the outline. How can I have A, B, C for root items, 1, 2, 3 for the sub-items, and a, b, c for sub-sub-items (sample 1)

public void init()
{
	COM com_Column,com_Columns,com_Items;
	anytype var_Column,var_Columns,var_Items;
	int h,hChild;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	exgrid1.AutoDrag(3/*exAutoDragPositionAny*/);
	exgrid1.HasLines(1/*exSolidLine*/);
	exgrid1.Indent(16);
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		com_Columns.Add("Default");
		var_Column = COM::createFromVariant(com_Columns.Add("")); com_Column = var_Column;
			com_Column.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
			com_Column.Def(49/*exCellPaddingRight*/,COMVariant::createFromInt(4));
			com_Column.Alignment(2/*RightAlignment*/);
			com_Column.AllowSizing(false);
			com_Column.Width(24);
			com_Column.Position(0);
			com_Column.FormatColumn("(1:=(0 :=(1 rpos '.|A-Z||a-z|')) rfind `.`) < 0 ? `<b>` + =:0 : `<i>` + (=:0 mid (1 + 1 + =:1) ) ");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(h,,"Child");
		hChild = com_Items.InsertItem(h,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(h,,"Child");
		com_Items.ExpandItem(0,true);
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(h,,"Child");
		hChild = com_Items.InsertItem(h,,"Child");
		com_Items.CellState(hChild,COMVariant::createFromInt(0),1);
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(hChild,,"Child");
		com_Items.InsertItem(h,,"Child");
	exgrid1.EndUpdate();
}
973
How can I programmatically group by columns, without having the control's sort bar visible

public void init()
{
	COM com_rs;
	anytype rs;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.SortBarHeight(0);
	exgrid1.SortBarVisible(true);
	exgrid1.SortBarCaption("Drag a <b>column</b> header here to group by that column.");
	exgrid1.AllowGroupBy(true);
	exgrid1.Layout("multiplesort=\"C1:2\"");
	exgrid1.EndUpdate();
}
972
How do I perform my own sort

// Sort event - Fired when the control sorts a column.
void onEvent_Sort()
{
	COM com_Items;
	anytype var_Items;
	;
	print( "Sort" );
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.ItemPosition(com_Items.ItemByIndex(1),0);
		com_Items.ItemPosition(com_Items.ItemByIndex(0),1);
}

public void init()
{
	COM com_Columns,com_Items;
	anytype var_Columns,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.SingleSort(false);
	exgrid1.SortOnClick(1/*exUserSort*/);
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		COM::createFromVariant(com_Columns.Add("Index")).FormatColumn("0 index ``");
		com_Columns.Add("Data 1");
		com_Columns.Add("Data 2");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem(COMVariant::createFromInt(0));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromInt(2));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromInt(3));
		h = com_Items.AddItem(COMVariant::createFromInt(4));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromInt(5));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromInt(6));
		h = com_Items.AddItem(COMVariant::createFromInt(7));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromInt(8));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromInt(9));
	exgrid1.Layout("multiplesort=\"C1:1 C2:2\"");
	exgrid1.EndUpdate();
}
971
Is it possible to have a different alignment for parts of the cell's caption

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.TreeColumnIndex(-1);
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Default")); com_Column = var_Column;
		com_Column.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellHAlignment(com_Items.AddItem("all-left"),COMVariant::createFromInt(0),0/*LeftAlignment*/);
		com_Items.CellHAlignment(com_Items.AddItem("all-center"),COMVariant::createFromInt(0),1/*CenterAlignment*/);
		com_Items.CellHAlignment(com_Items.AddItem("all-right"),COMVariant::createFromInt(0),2/*RightAlignment*/);
		h = com_Items.AddItem("left<c>center<r>right");
		com_Items.CellValueFormat(h,COMVariant::createFromInt(0),1/*exHTML*/);
	exgrid1.EndUpdate();
}
970
I have a column with Def(exCellSingleLine) property on False, word-wrapping, and I am wondering if possible to update the column's content while user is resizing it
public void init()
{
	COM com_Column,com_Column1,com_Columns,com_Items;
	anytype var_Column,var_Column1,var_Columns,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		var_Column = COM::createFromVariant(com_Columns.Add("MultipleLine")); com_Column = var_Column;
			com_Column.Width(32);
			com_Column.Def(16/*exCellSingleLine*/,COMVariant::createFromBoolean(false));
			com_Column.Def(64/*exColumnResizeContiguously*/,COMVariant::createFromBoolean(true));
		var_Column1 = COM::createFromVariant(com_Columns.Add("SingleLine")); com_Column1 = var_Column1;
			com_Column1.Def(16/*exCellSingleLine*/,COMVariant::createFromBoolean(false));
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem("This is a bit of long text that should break the line"),COMVariant::createFromInt(1),"This is a bit of long text that should break the line");
	exgrid1.EndUpdate();
}
969
How can I get the absolute position of an item
// MouseMove event - Occurs when the user moves the mouse.
void onEvent_MouseMove(int   _Button,int   _Shift,int   _X,int   _Y)
{
	COM com_Items;
	anytype var_Items;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		print( com_Items.CellCaption(exgrid1.ItemFromPoint(-1,-1,c,hit),"Position") );
}

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.BackColorAlternate(WinApi::RGB2int(240,240,240));
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	COM::createFromVariant(exgrid1.Columns().Add("Def")).DisplayFilterButton(true);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(com_Items.InsertItem(h,,"Child 1"),,"Sub-Child 1");
		com_Items.InsertItem(com_Items.InsertItem(h,,"Child 2"),,"Sub-Child 2");
	exgrid1.PutItems(exgrid1.GetItems(COMVariant::createFromInt(-1)));
	exgrid1.PutItems(exgrid1.GetItems(COMVariant::createFromInt(-1)));
	exgrid1.PutItems(exgrid1.GetItems(COMVariant::createFromInt(-1)));
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column = var_Column;
		com_Column.FormatColumn("1 apos ``");
		com_Column.Visible(false);
	exgrid1.EndUpdate();
}
968
I am using ExComboBox as an user editor, how can I display a different column

// UserEditorClose event - Fired the user editor is about to be opened.
void onEvent_UserEditorClose(COM   _Object,int   _Item,int   _ColIndex)
{
	// Items.CellValue(Item,ColIndex) = Object.Value
	;
}

// UserEditorOleEvent event - Occurs when an user editor fires an event.
void onEvent_UserEditorOleEvent(COM   _Object,COM   _Ev,COMVariant /*bool*/   _CloseEditor,int   _Item,int   _ColIndex)
{
	;
	print( _Ev );
}

// UserEditorOpen event - Occurs when an user editor is about to be opened.
void onEvent_UserEditorOpen(COM   _Object,int   _Item,int   _ColIndex)
{
	// Object.Value = Me.Items.CellValue(Item,ColIndex)
	;
}

public void init()
{
	COM com_Column,com_Column1,com_ComboBox,com_Editor,com_Items,com_rs;
	anytype rs,var_Column,var_Column1,var_ComboBox,var_Editor,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Editor = COM::createFromVariant(exgrid1.Columns().Add("Exontrol.ComboBox")).Editor(); com_Editor = var_Editor;
		com_Editor.EditType(16/*UserEditorType*/);
		com_Editor.UserEditor("Exontrol.ComboBox","");
		// Add 'ExComboBox 1.0 Control Library(ExComboBox.dll)' reference to your project.
		var_ComboBox = com_Editor.UserEditorObject(); com_ComboBox = var_ComboBox;
			com_ComboBox.BeginUpdate();
			com_ComboBox.Style(2/*DropDownList*/);
			com_ComboBox.ColumnAutoResize(false);
			// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
			rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
				rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
			com_ComboBox.DataSource(rs);
			com_ComboBox.Alignment(0/*LeftAlignment*/);
			com_ComboBox.IntegralHeight(true);
			com_ComboBox.MinHeightList(128);
			com_ComboBox.MinWidthList(648);
			com_ComboBox.HeaderHeight(36);
			com_ComboBox.AllowSizeGrip(true);
			com_ComboBox.SingleEdit(true);
			com_ComboBox.LabelColumnIndex(7);
			com_ComboBox.SearchColumnIndex(0);
			var_Column = COM::createFromObject(com_ComboBox.Columns()).Item(COMVariant::createFromInt(0)); com_Column = var_Column;
				com_Column.HeaderBold(true);
				com_Column.HTMLCaption("OrderID<br><fgcolor=808080>(search)");
			var_Column1 = COM::createFromObject(com_ComboBox.Columns()).Item(COMVariant::createFromInt(7)); com_Column1 = var_Column1;
				com_Column1.HeaderBold(true);
				com_Column1.HTMLCaption("ShipName<br><fgcolor=808080>(display)");
				com_Column1.Width(128);
			com_ComboBox.UseTabKey(false);
			com_ComboBox.EndUpdate();
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	exgrid1.DefaultItemHeight(21);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellEditorVisible(com_Items.AddItem(COMVariant::createFromInt(10248)),COMVariant::createFromInt(0),1/*exEditorVisible*/);
		com_Items.CellEditorVisible(com_Items.AddItem(COMVariant::createFromInt(10249)),COMVariant::createFromInt(0),1/*exEditorVisible*/);
		com_Items.CellEditorVisible(com_Items.AddItem(COMVariant::createFromInt(10250)),COMVariant::createFromInt(0),1/*exEditorVisible*/);
	exgrid1.EndUpdate();
}
967
How do I sort the index column as numeric (Method 3)

// AddItem event - Occurs after a new Item has been inserted to Items collection.
void onEvent_AddItem(int   _Item)
{
	COM com_Items;
	anytype var_Items;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellData(_Item,COMVariant::createFromInt(1),COMVariant::createFromStr(com_Items.CellCaption(_Item,COMVariant::createFromInt(1))));
}

public void init()
{
	COM com_Column,com_Column1,com_Items;
	anytype var_Column,var_Column1,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.DrawGridLines(-1/*exAllLines*/);
	exgrid1.ColumnAutoResize(true);
	exgrid1.ShowFocusRect(false);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Next")); com_Column = var_Column;
		com_Column.Def(48/*exCellPaddingLeft*/,COMVariant::createFromInt(4));
		com_Column.Def(52/*exHeaderPaddingLeft*/,COMVariant::createFromInt(4));
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("Index")); com_Column1 = var_Column1;
		com_Column1.AllowSizing(false);
		com_Column1.Width(48);
		com_Column1.FormatColumn("(((0 := (1 index ``)) mod 3) case ( default: ``; 0 : `<r><fgcolor=B0B0B0>`; 1: ``; 2 : `<c><fgcolor=808080>` )) + str(=:0)");
		com_Column1.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
		com_Column1.SortType(5/*SortUserData*/);
		com_Column1.Position(0);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("Item 1");
		com_Items.AddItem("Item 2");
		com_Items.AddItem("Item 3");
		com_Items.AddItem("Item 4");
		com_Items.AddItem("Item 5");
		com_Items.AddItem("Item 6");
		com_Items.AddItem("Item 7");
		com_Items.AddItem("Item 8");
		com_Items.AddItem("Item 9");
		com_Items.AddItem("Item 10");
	exgrid1.EndUpdate();
}
966
How do I sort the index column as numeric (Method 2)

// AddItem event - Occurs after a new Item has been inserted to Items collection.
void onEvent_AddItem(int   _Item)
{
	COM com_Items;
	anytype var_Items;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellSortData(_Item,COMVariant::createFromInt(1),COMVariant::createFromStr(com_Items.CellCaption(_Item,COMVariant::createFromInt(1))));
}

public void init()
{
	COM com_Column,com_Column1,com_Items;
	anytype var_Column,var_Column1,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.DrawGridLines(-1/*exAllLines*/);
	exgrid1.ColumnAutoResize(true);
	exgrid1.ShowFocusRect(false);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Next")); com_Column = var_Column;
		com_Column.Def(48/*exCellPaddingLeft*/,COMVariant::createFromInt(4));
		com_Column.Def(52/*exHeaderPaddingLeft*/,COMVariant::createFromInt(4));
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("Index")); com_Column1 = var_Column1;
		com_Column1.AllowSizing(false);
		com_Column1.Width(48);
		com_Column1.FormatColumn("(((0 := (1 index ``)) mod 3) case ( default: ``; 0 : `<r><fgcolor=B0B0B0>`; 1: ``; 2 : `<c><fgcolor=808080>` )) + str(=:0)");
		com_Column1.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
		com_Column1.SortType(6/*SortCellData*/);
		com_Column1.Position(0);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("Item 1");
		com_Items.AddItem("Item 2");
		com_Items.AddItem("Item 3");
		com_Items.AddItem("Item 4");
		com_Items.AddItem("Item 5");
		com_Items.AddItem("Item 6");
		com_Items.AddItem("Item 7");
		com_Items.AddItem("Item 8");
		com_Items.AddItem("Item 9");
		com_Items.AddItem("Item 10");
	exgrid1.EndUpdate();
}
965
How do I sort the index column as numeric (Method 1)

public void init()
{
	COM com_Column,com_Column1,com_Items;
	anytype var_Column,var_Column1,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Sort Index As String (Default)")); com_Column = var_Column;
		com_Column.FormatColumn("1 index ``");
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("Sort Index As Numeric")); com_Column1 = var_Column1;
		com_Column1.ComputedField("%C0");
		com_Column1.SortType(1/*SortNumeric*/);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
	exgrid1.EndUpdate();
}
964
How can I put icons/images into buttons

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	str var_s;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(true);
	var_s = "gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql";
	var_s = var_s + "Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0";
	var_s = var_s + "ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN";
	var_s = var_s + "AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=";
	exgrid1.Images(COMVariant::createFromStr(var_s));
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("C+B")); com_Column = var_Column;
		com_Column.AllowSizing(false);
		com_Column.Width(48);
		com_Column.FormatColumn("` <img>` + ( 1 + (1 index ``) mod 3 ) + `</img> `");
		com_Column.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
		com_Column.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
		com_Column.Def(2/*exCellHasButton*/,COMVariant::createFromBoolean(true));
		com_Column.Def(3/*exCellButtonAutoWidth*/,COMVariant::createFromBoolean(true));
	exgrid1.Columns().Add("");
	exgrid1.DrawGridLines(2/*exVLines*/);
	exgrid1.DefaultItemHeight(20);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
	exgrid1.EndUpdate();
}
963
Is it possible to have a CheckBox and Button TOGETHER on all cells in a column

// ButtonClick event - Occurs when user clicks on the cell's button.
void onEvent_ButtonClick(int   _Item,int   _ColIndex,COMVariant   _Key)
{
	;
	print( "ButtonClick" );
	print( _Item );
	print( _Key );
}

// CellStateChanged event - Fired after cell's state has been changed.
void onEvent_CellStateChanged(int   _Item,int   _ColIndex)
{
	;
	print( "CellStateChanged" );
	print( _Item );
}

public void init()
{
	COM com_Column,com_Column1,com_Items;
	anytype var_Column,var_Column1,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(true);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("")); com_Column = var_Column;
		com_Column.AllowSizing(false);
		com_Column.Width(32);
		com_Column.FormatColumn("1 index ``");
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("Def")); com_Column1 = var_Column1;
		com_Column1.AllowSizing(false);
		com_Column1.Width(48);
		com_Column1.FormatColumn("`     `");
		com_Column1.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
		com_Column1.Def(2/*exCellHasButton*/,COMVariant::createFromBoolean(true));
		com_Column1.Def(3/*exCellButtonAutoWidth*/,COMVariant::createFromBoolean(true));
	exgrid1.Columns().Add("");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
	exgrid1.EndUpdate();
}
962
I have columns that look up the same data. (e.g. different contact) so both could / should use the same editor. Is this possible, to use other column's editor

public void init()
{
	COM com_Column,com_Columns,com_Editor,com_Editor1,com_Items;
	anytype var_Column,var_Columns,var_Editor,var_Editor1,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.SelBackColor(exgrid1.BackColor());
	exgrid1.SelForeColor(exgrid1.ForeColor());
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		var_Column = COM::createFromVariant(com_Columns.Add("Pos")); com_Column = var_Column;
			com_Column.Width(32);
			com_Column.AllowSizing(false);
			com_Column.FormatColumn("1 index ``");
		var_Editor = com_Columns.Add("C1").Editor(); com_Editor = var_Editor;
			com_Editor.EditType(17/*ColorListType*/);
			com_Editor.ClearItems();
			com_Editor.AddItem(255,"Red Color");
			com_Editor.AddItem(16711680,"Blue Color");
			com_Editor.AddItem(65280,"Green Color");
		var_Editor1 = COM::createFromObject(COM::createFromVariant(com_Columns.Add("C2"))).Editor(); com_Editor1 = var_Editor1;
		com_Editor1.EditType(268435457/*CloneType | EditType*/);
		var_Editor1 = COM::createFromObject(COM::createFromVariant(com_Columns.Add("C3"))).Editor(); com_Editor1 = var_Editor1;
		com_Editor1.EditType(268435457/*CloneType | EditType*/);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("");
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromInt(16711680));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromInt(65280));
		com_Items.CellValue(h,COMVariant::createFromInt(3),COMVariant::createFromInt(255));
		h = com_Items.AddItem("");
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromInt(255));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromInt(16711680));
		com_Items.CellValue(h,COMVariant::createFromInt(3),COMVariant::createFromInt(65280));
	exgrid1.EndUpdate();
}
961
Is there an easy way to get an effect like in a Microsoft Access / SQL-Server Table view, where you can scroll-up till the last row containing data is displayed as top-row

public void init()
{
	COM com_rs;
	anytype rs;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HasLines(0/*exNoLine*/);
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.ScrollBars(2051/*exVScrollEmptySpace | exBoth*/);
	exgrid1.ScrollPos(true,exgrid1.Items().ItemCount());
	exgrid1.EndUpdate();
}
960
Does filtering work with umlauts / accents characters
public void init()
{
	COM com_Column,com_Column1,com_Items;
	anytype var_Column,var_Column1,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Names")); com_Column = var_Column;
		com_Column.DisplayFilterButton(true);
		com_Column.FilterType(3/*exPattern*/);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("Mantel");
		com_Items.AddItem("Mechanik");
		com_Items.AddItem("Motor");
		com_Items.AddItem("Murks");
		com_Items.AddItem("Märchen");
		com_Items.AddItem("Möhren");
		com_Items.AddItem("Mühle");
		com_Items.AddItem("Sérigraphie");
	var_Column1 = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(0)); com_Column1 = var_Column1;
	com_Column1.Filter("*ä*");
	exgrid1.ApplyFilter();
	exgrid1.EndUpdate();
}
959
How FullPath method works

public void init()
{
	COM com_Items;
	anytype var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	exgrid1.Columns().Add("C1");
	exgrid1.Columns().Add("C2");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root");
		com_Items.CellValue(h,COMVariant::createFromInt(1),"A");
		com_Items.CellValue(com_Items.InsertItem(h,,"Child 1"),COMVariant::createFromInt(1),"B");
		com_Items.CellValue(com_Items.InsertItem(h,,"Child 2"),COMVariant::createFromInt(1),"C");
		com_Items.ExpandItem(h,true);
	exgrid1.SearchColumnIndex(1);
	print( exgrid1.SearchColumnIndex() );
	print( .FullPath(exgrid1.Items().ItemByIndex(2)) );
	exgrid1.SearchColumnIndex(0);
	print( exgrid1.SearchColumnIndex() );
	print( .FullPath(exgrid1.Items().ItemByIndex(2)) );
	exgrid1.EndUpdate();
}
958
Can I set the search box / filterbarprompt to invisible, so I can use my own input and *string* via VBA
public void init()
{
	COM com_Columns,com_Items;
	anytype var_Columns,var_Items;
	int h0;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(true);
	exgrid1.ContinueColumnScroll(0);
	exgrid1.MarkSearchColumn(false);
	exgrid1.SearchColumnIndex(1);
	exgrid1.FilterBarHeight(0);
	exgrid1.FilterBarPromptVisible(1/*exFilterBarPromptVisible*/);
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		COM::createFromVariant(com_Columns.Add("Name")).Width(96);
		COM::createFromVariant(com_Columns.Add("Title")).Width(96);
		com_Columns.Add("City");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h0 = com_Items.AddItem("Nancy Davolio");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Representative");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"Seattle");
		h0 = com_Items.AddItem("Andrew Fuller");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Vice President, Sales");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"Tacoma");
		com_Items.SelectItem(h0,true);
		h0 = com_Items.AddItem("Janet Leverling");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Representative");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"Kirkland");
		h0 = com_Items.AddItem("Margaret Peacock");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Representative");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"Redmond");
		h0 = com_Items.AddItem("Steven Buchanan");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Manager");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"London");
		h0 = com_Items.AddItem("Michael Suyama");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Representative");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"London");
		h0 = com_Items.AddItem("Robert King");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Representative");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"London");
		h0 = com_Items.AddItem("Laura Callahan");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Inside Sales Coordinator");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"Seattle");
		h0 = com_Items.AddItem("Anne Dodsworth");
		com_Items.CellValue(h0,COMVariant::createFromInt(1),"Sales Representative");
		com_Items.CellValue(h0,COMVariant::createFromInt(2),"London");
	exgrid1.FilterBarPromptPattern("London");
	exgrid1.EndUpdate();
}
957
How to load a hierarchy using the control's DataSource property (Parent-ID-Relation)

// AddItem event - Occurs after a new Item has been inserted to Items collection.
void onEvent_AddItem(int   _Item)
{
	COM com_Items;
	anytype var_Items;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.SetParent(_Item,com_Items.FindItem(com_Items.CellValue(_Item,"ReportsTo"),"EmployeeID"));
}

public void init()
{
	COM com_Items,com_rs;
	anytype rs,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	exgrid1.ColumnAutoResize(false);
	exgrid1.ContinueColumnScroll(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("SELECT * FROM Employees ORDER BY ReportsTo","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.Items().ExpandItem(0,true);
	exgrid1.EndUpdate();
}
956
Is it possible to select the entire row/line, when user clicks the first column, and select individually the rest of cells, while user clicks any other column

// MouseDown event - Occurs when the user presses a mouse button.
void onEvent_MouseDown(int   _Button,int   _Shift,int   _X,int   _Y)
{
	int i;
	;
	i = exgrid1.ItemFromPoint(-1,-1,c,hit);
	exgrid1.FullRowSelect(exgrid1.Columns().Item(c).Data());
}

public void init()
{
	COM com_Column,com_rs;
	anytype rs,var_Column;
	int i;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HeaderHeight(22);
	exgrid1.HeaderAppearance(1/*Flat*/);
	exgrid1.BackColorLock(WinApi::RGB2int(240,240,240));
	exgrid1.BackColorHeader(exgrid1.BackColorLock());
	exgrid1.HasLines(0/*exNoLine*/);
	exgrid1.ColumnAutoResize(false);
	exgrid1.SortBarVisible(false);
	exgrid1.AllowGroupBy(true);
	exgrid1.ReadOnly(-1/*exReadOnly*/);
	exgrid1.ShowFocusRect(false);
	exgrid1.CountLockedColumns(1);
	exgrid1.AutoDrag(16/*exAutoDragScroll*/);
	exgrid1.SingleSort(false);
	exgrid1.ColumnsAllowSizing(true);
	exgrid1.DrawGridLines(-1/*exAllLines*/);
	exgrid1.GridLineStyle(48/*exGridLinesSolid*/);
	exgrid1.GridLineColor(WinApi::RGB2int(220,220,220));
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(0)); com_Column = var_Column;
	com_Column.Data(COMVariant::createFromInt(-1));
	exgrid1.Layout("singlesort=\"C5:1\";multiplesort=\" C1:2\"");
	exgrid1.EndUpdate();
}
955
The user are not able to size the columns at runtime when using HeaderAppearance property on zero
public void init()
{
	str var_s;
	;

	super();

	var_s = "gBFLBCJwBAEHhEJAAEhABJEIQAAYAQGKIYBkAKBQAGaAoDDcMQ5QwAAyDGKEEwsACEIrjKCRShyCYZRhGcTSBCIZBqEqSZLiEZRQiiCYsS5GQBSFDcOwHGyQZonKK3Lh";
	var_s = var_s + "GCYBgIA=";
	exgrid1.VisualAppearance().Add(1,COMVariant::createFromStr(var_s));
	exgrid1.HeaderAppearance(16777216);
	exgrid1.Columns().Add(1);
	exgrid1.Columns().Add(2);
	exgrid1.Columns().Add(3);
}
954
Is it possible to embed the exGauge into the exGrid control

// ItemOleEvent event - Fired when an ActiveX control hosted by an item has fired an event.
void onEvent_ItemOleEvent(int   _Item,COM   _Ev)
{
	COM com_Gauge,com_Layer;
	COMVariant v;
	anytype var_Gauge,var_Layer;
	;
	// Add 'ExGauge 1.0 Control Library(ExGauge.dll)' reference to your project.
	var_Gauge = COM::createFromVariant(exgrid1.Items().ItemObject(exgrid1.Items().ItemByIndex(2))); com_Gauge = var_Gauge;
		v = com_Gauge.FormatABC("date(`now`)");
		var_Layer = COM::createFromObject(com_Gauge.Layers()).Item("sec"); com_Layer = var_Layer;
		com_Layer.Value(v);
		var_Layer = COM::createFromObject(com_Gauge.Layers()).Item("min"); com_Layer = var_Layer;
		com_Layer.Value(v);
		var_Layer = COM::createFromObject(com_Gauge.Layers()).Item("hour"); com_Layer = var_Layer;
		com_Layer.Value(v);
}

// MouseMove event - Occurs when the user moves the mouse.
void onEvent_MouseMove(int   _Button,int   _Shift,int   _X,int   _Y)
{
	COM com_Gauge;
	anytype var_Gauge;
	;
	var_Gauge = COM::createFromVariant(exgrid1.Items().ItemObject(exgrid1.Items().ItemByIndex(2))); com_Gauge = var_Gauge;
		com_Gauge.TimerInterval(1000);
}

public void init()
{
	COM com_Background,com_Gauge,com_Items,com_Layer,com_Layer1,com_Layer2,com_Layer3,com_Layer4,com_Layers,com_Picture;
	COMVariant v;
	anytype var_Background,var_Gauge,var_Items,var_Layer,var_Layer1,var_Layer2,var_Layer3,var_Layer4,var_Layers,var_Picture;
	int h;
	str var_s,var_s1;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ScrollBySingleLine(true);
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	exgrid1.HasLines(2/*exThinLine*/);
	exgrid1.ScrollBySingleLine(true);
	exgrid1.Columns().Add("Default");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Normal Item");
		h = com_Items.AddItem("Gauge-Clock Inside");
		com_Items.ExpandItem(h,true);
		h = com_Items.InsertControlItem(h,"Exontrol.Gauge");
		com_Items.ItemHeight(h,256);
		var_Gauge = COM::createFromVariant(com_Items.ItemObject(h)); com_Gauge = var_Gauge;
			com_Gauge.PicturesPath("C:\\Program Files\\Exontrol\\ExGauge\\Sample\\Design\\Circular\\Clock");
			com_Gauge.DefaultLayer(185/*exDefLayerRotateType*/,COMVariant::createFromInt(2));
			var_Layers = COM::createFromObject(com_Gauge.Layers()); com_Layers = var_Layers;
			com_Layers.Count(4);
			var_Layer = COM::createFromObject(com_Gauge.Layers()).Item(COMVariant::createFromInt(0)); com_Layer = var_Layer;
				var_Background = COM::createFromObject(com_Layer.Background()); com_Background = var_Background;
				var_Picture = COM::createFromObject(com_Background).Picture(); com_Picture = var_Picture;
				com_Picture.Name("vista_clock.png");
			var_Layer1 = COM::createFromObject(com_Gauge.Layers()).Item(COMVariant::createFromInt(1)); com_Layer1 = var_Layer1;
				com_Layer1.Position(3);
				com_Layer1.Key("sec");
				com_Layer1.OnDrag(2/*exDoRotate*/);
				com_Layer1.Selectable(false);
				var_Background = COM::createFromObject(com_Layer1.Background()); com_Background = var_Background;
				var_Picture = COM::createFromObject(com_Background).Picture(); com_Picture = var_Picture;
				com_Picture.Name("second-hand.png");
				var_s = "((2:=(((1:=( ( (0:=(value < 0 ? floor(value) + 1 - value : value - floor(value))) < 0.5 ? =:0 : (0:= (=:0 - 0.5)) ) * 24 ))  - f";
				var_s = var_s + "loor(=:1)) * 60 )) - floor(=:2) ) * 360";
				com_Layer1.ValueToRotateAngle(var_s);
				com_Layer1.RotateAngleToValue("value / 360 / 24 / 60");
			var_Layer2 = COM::createFromObject(com_Gauge.Layers()).Item(COMVariant::createFromInt(2)); com_Layer2 = var_Layer2;
				com_Layer2.Position(2);
				com_Layer2.Key("min");
				com_Layer2.OnDrag(2/*exDoRotate*/);
				com_Layer2.Selectable(false);
				var_Background = COM::createFromObject(com_Layer2.Background()); com_Background = var_Background;
				var_Picture = COM::createFromObject(com_Background).Picture(); com_Picture = var_Picture;
				com_Picture.Name("Minute.png");
				var_s1 = "((1:=( ( (0:=(value < 0 ? floor(value) + 1 - value : value - floor(value))) < 0.5 ? =:0 : (0:= (=:0 - 0.5)) ) * 24 ))  - floor(=";
				var_s1 = var_s1 + ":1)) * 360";
				com_Layer2.ValueToRotateAngle(var_s1);
				com_Layer2.RotateAngleToValue("value / 360 / 24 / 60");
			var_Layer3 = COM::createFromObject(com_Gauge.Layers()).Item(COMVariant::createFromInt(3)); com_Layer3 = var_Layer3;
				com_Layer3.Position(1);
				com_Layer3.Key("hour");
				com_Layer3.OnDrag(2/*exDoRotate*/);
				var_Background = COM::createFromObject(com_Layer3.Background()); com_Background = var_Background;
				var_Picture = COM::createFromObject(com_Background).Picture(); com_Picture = var_Picture;
				com_Picture.Name("Hour.png");
				com_Layer3.ValueToRotateAngle("2 * 360 * ( (0:=(value < 0 ? floor(value) + 1 - value : value - floor(value))) < 0.5 ? =:0 : (0:= (=:0 - 0.5)) )");
				com_Layer3.RotateAngleToValue("value / 360 * 0.5");
			v = com_Gauge.FormatABC("date(`now`)");
			var_Layer4 = COM::createFromObject(com_Gauge.Layers()).Item("sec"); com_Layer4 = var_Layer4;
			com_Layer4.Value(v);
			var_Layer4 = COM::createFromObject(com_Gauge.Layers()).Item("min"); com_Layer4 = var_Layer4;
			com_Layer4.Value(v);
			var_Layer4 = COM::createFromObject(com_Gauge.Layers()).Item("hour"); com_Layer4 = var_Layer4;
			com_Layer4.Value(v);
		h = com_Items.AddItem("Normal Item");
	exgrid1.EndUpdate();
}
953
What's the difference between merge cells and divider item

// AddItem event - Occurs after a new Item has been inserted to Items collection.
void onEvent_AddItem(int   _Item)
{
	COM com_Items;
	anytype var_Items;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellBackColor(_Item,COMVariant::createFromInt(0),WinApi::RGB2int(240,240,240));
		com_Items.ItemHasChildren(_Item,true);
}

public void init()
{
	COM com_Items;
	anytype var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.TreeColumnIndex(0);
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	exgrid1.DrawGridLines(-1/*exAllLines*/);
	COM::createFromVariant(exgrid1.Columns().Add("C1")).FormatColumn("1 index `A-Z`");
	COM::createFromVariant(exgrid1.Columns().Add("C2")).FormatColumn("1 index ``");
	COM::createFromVariant(exgrid1.Columns().Add("C3")).FormatColumn("1 index ``");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem();
		com_Items.AddItem();
		h = com_Items.AddItem();
		com_Items.CellMerge(h,COMVariant::createFromInt(0),COMVariant::createFromInt(1));
		com_Items.FormatCell(h,COMVariant::createFromInt(0),"`merge cells`");
		com_Items.CellHAlignment(h,COMVariant::createFromInt(0),1/*CenterAlignment*/);
		h = com_Items.AddItem();
		com_Items.ItemDivider(h,0);
		com_Items.CellHAlignment(h,COMVariant::createFromInt(0),1/*CenterAlignment*/);
		com_Items.FormatCell(h,COMVariant::createFromInt(0),"`item divider`");
		com_Items.AddItem();
		com_Items.AddItem();
	exgrid1.EndUpdate();
}
952
is it possible to resize a column with the mouse without changing the width of the next column

public void init()
{
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	COM::createFromVariant(exgrid1.Columns().Add("Column 1")).Width(256);
	COM::createFromVariant(exgrid1.Columns().Add("Column 2")).Width(512);
	exgrid1.DrawGridLines(-1/*exAllLines*/);
	exgrid1.EndUpdate();
}
951
How do I ensure that the newly item fits the control's client area

// ButtonClick event - Occurs when user clicks on the cell's button.
void onEvent_ButtonClick(int   _Item,int   _ColIndex,COMVariant   _Key)
{
	COM com_Items;
	anytype var_Items;
	int h;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("");
		com_Items.SelectItem(h,true);
		com_Items.EnsureVisibleItem(h);
	exgrid1.FocusColumnIndex(0);
}

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("")); com_Column = var_Column;
		com_Column.AllowSizing(false);
		com_Column.AllowDragging(false);
		com_Column.AllowSort(false);
		com_Column.Width(24);
		com_Column.Def(2/*exCellHasButton*/,COMVariant::createFromBoolean(true));
	COM::createFromVariant(exgrid1.Columns().Add("Position")).FormatColumn("1 apos `A-Z`");
	exgrid1.CountLockedColumns(1);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("");
		com_Items.AddItem("");
		com_Items.AddItem("");
	exgrid1.EndUpdate();
}
950
How do I find the predefined string for giving value, or giving identifier for specified predefined caption of editor

// Change event - Occurs when the user changes the cell's content.
void onEvent_Change(int   _Item,int   _ColIndex,COMVariant /*variant*/   _NewValue)
{
	;
	print( "FindItem(numeric) is " );
	print( _NewValue );
	print( exgrid1.Columns().Item(COMVariant::createFromInt(0)).Editor().FindItem(_NewValue) );
}

public void init()
{
	COM com_Column,com_Column1,com_Column2,com_Editor,com_Items;
	anytype var_Column,var_Column1,var_Column2,var_Editor,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("DropDownList")); com_Column = var_Column;
		var_Editor = com_Column.Editor(); com_Editor = var_Editor;
			com_Editor.EditType(3/*DropDownListType*/);
			com_Editor.AddItem(1,"Ken Robinson");
			com_Editor.AddItem(2,"Dave Nichols");
			com_Editor.AddItem(3,"Zane Thomas");
			com_Editor.AddItem(4,"James Shields");
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("CellValue")); com_Column1 = var_Column1;
		com_Column1.FormatColumn("%0");
		com_Column1.Def(4/*exCellBackColor*/,COMVariant::createFromInt(15790320));
		com_Column1.Def(7/*exHeaderBackColor*/,com_Column1.Def(4/*exCellBackColor*/));
	var_Column2 = COM::createFromVariant(exgrid1.Columns().Add("CellCaption")); com_Column2 = var_Column2;
		com_Column2.FormatColumn("%C0");
		com_Column2.Def(4/*exCellBackColor*/,COMVariant::createFromInt(15790320));
		com_Column2.Def(7/*exHeaderBackColor*/,com_Column2.Def(4/*exCellBackColor*/));
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem(COMVariant::createFromInt(1));
		com_Items.AddItem(exgrid1.Columns().Item(COMVariant::createFromInt(0)).Editor().FindItem("Zane Thomas"));
		com_Items.AddItem(COMVariant::createFromInt(2));
	exgrid1.EndUpdate();
}
949
How can I align captions of items with checkbox, with items with no checkbox

public void init()
{
	COM com_Items;
	anytype var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.Columns().Add("Default");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellImages(com_Items.AddItem(COMVariant::createFromInt(0)),COMVariant::createFromInt(0),"1");
		com_Items.CellHasCheckBox(com_Items.AddItem(COMVariant::createFromInt(1)),COMVariant::createFromInt(0),true);
		com_Items.CellImages(com_Items.AddItem(COMVariant::createFromInt(2)),COMVariant::createFromInt(0),"1");
	exgrid1.EndUpdate();
}
948
How can I prevent sorting a column

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Default")); com_Column = var_Column;
		com_Column.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
		com_Column.PartialCheck(true);
		com_Column.AllowSort(false);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root");
		com_Items.InsertItem(h,,"Child 1");
		com_Items.InsertItem(h,,"Child 2");
		com_Items.ExpandItem(h,true);
	exgrid1.EndUpdate();
}
947
Is there a possibility to group without moving and showing the column to the SortBar

public void init()
{
	COM com_rs;
	anytype rs;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HasLines(0/*exNoLine*/);
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.SingleSort(false);
	exgrid1.SortBarVisible(false);
	exgrid1.AllowGroupBy(true);
	exgrid1.Layout("singlesort=\"C5:1\";multiplesort=\" C1:2\"");
	exgrid1.EndUpdate();
}
946
How can I show each group header ( not-subroup ), with a different background color, while alternate background colors for inside items

// LayoutChanged event - Occurs when column's position or column's size is changed.
void onEvent_LayoutChanged()
{
	;
	exgrid1.Refresh();
}

public void init()
{
	COM com_Column,com_Column1,com_ConditionalFormat,com_rs;
	anytype rs,var_Column,var_Column1,var_ConditionalFormat;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HasLines(0/*exNoLine*/);
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.SingleSort(false);
	exgrid1.SortBarVisible(true);
	exgrid1.AllowGroupBy(true);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(1)); com_Column = var_Column;
	com_Column.SortOrder(true);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column = var_Column;
		com_Column.FormatColumn("(0:= (1 rpos '')) right ( ( 1:= ( =:0 rfind `.` ) ) != -1 ? =:1 : len(=:0))");
		com_Column.Visible(false);
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column1 = var_Column1;
		com_Column1.FormatColumn("(1 rpos '') contains '.'");
		com_Column1.Visible(false);
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("(%C13 mod 2) != 0"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(240,240,240));
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("%C14 = 0"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(190,190,190));
	exgrid1.EndUpdate();
}
945
What is the difference between %0 and %C0, when using in expressions ( format, conditional format, computed fields, and so on )

public void init()
{
	COM com_Column,com_Column1,com_Editor,com_Items;
	anytype var_Column,var_Column1,var_Editor,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HeaderAppearance(4/*Etched*/);
	exgrid1.HeaderHeight(24);
	exgrid1.ScrollBySingleLine(true);
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	COM::createFromVariant(exgrid1.Columns().Add("Value")).Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("FormatColumn = `%0` ~ CellValue")); com_Column = var_Column;
		com_Column.FormatColumn("%0");
		com_Column.Def(16/*exCellSingleLine*/,COMVariant::createFromBoolean(false));
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("FormatColumn = `%C0`~ CellCaption")); com_Column1 = var_Column1;
		com_Column1.FormatColumn("%C0");
		com_Column1.Def(16/*exCellSingleLine*/,COMVariant::createFromBoolean(false));
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem(COMVariant::createFromReal(1.1234));
		com_Items.CellValueFormat(com_Items.AddItem("<sha ;;0>This <fgcolor=FF0000>is a <s><b>HTM</fgcolor>L</b> text</s>."),COMVariant::createFromInt(0),1/*exHTML*/);
		var_Editor = com_Items.CellEditor(com_Items.AddItem(COMVariant::createFromInt(3))); com_Editor = var_Editor;
			com_Editor.EditType(6/*CheckListType*/);
			com_Editor.AddItem(1,"Border");
			com_Editor.AddItem(2,"Thick");
			com_Editor.AddItem(4,"Shadow");
		com_Items.FormatCell(com_Items.AddItem(COMVariant::createFromInt(10000)),COMVariant::createFromInt(0),"`<b>` + currency(value)");
	exgrid1.EndUpdate();
}
944
How can I alternate colors for each group header ( not-subroup ), with a different background color, while items of the same group showing with a different color

// LayoutChanged event - Occurs when column's position or column's size is changed.
void onEvent_LayoutChanged()
{
	;
	exgrid1.Refresh();
}

public void init()
{
	COM com_Column,com_Column1,com_ConditionalFormat,com_rs;
	anytype rs,var_Column,var_Column1,var_ConditionalFormat;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HasLines(0/*exNoLine*/);
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.SingleSort(false);
	exgrid1.SortBarVisible(true);
	exgrid1.AllowGroupBy(true);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(1)); com_Column = var_Column;
	com_Column.SortOrder(true);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column = var_Column;
		com_Column.FormatColumn("(0:= (1 rpos '')) left ( ( 1:= ( =:0 lfind `.` ) ) != -1 ? =:1 : len(=:0))");
		com_Column.Visible(false);
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column1 = var_Column1;
		com_Column1.FormatColumn("(1 rpos '') contains '.'");
		com_Column1.Visible(false);
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("(%C13 mod 2) != 0"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(240,240,240));
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("%C14 = 0"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(190,190,190));
	exgrid1.EndUpdate();
}
943
How can I highlight each group header, with a different background color (method 2)

// AddGroupItem event - Occurs after a new Group Item has been inserted to Items collection.
void onEvent_AddGroupItem(int   _Item)
{
	;
	exgrid1.Items().ItemBackColor(_Item,WinApi::RGB2int(190,190,190));
}

public void init()
{
	COM com_Column,com_rs;
	anytype rs,var_Column;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HasLines(0/*exNoLine*/);
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.SingleSort(false);
	exgrid1.SortBarVisible(true);
	exgrid1.AllowGroupBy(true);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(1)); com_Column = var_Column;
	com_Column.SortOrder(true);
	exgrid1.EndUpdate();
}
942
How can I highlight each group header ( not-subroup ), with a different background color (method 1)

// LayoutChanged event - Occurs when column's position or column's size is changed.
void onEvent_LayoutChanged()
{
	;
	exgrid1.Refresh();
}

public void init()
{
	COM com_Column,com_Column1,com_ConditionalFormat,com_rs;
	anytype rs,var_Column,var_Column1,var_ConditionalFormat;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HasLines(0/*exNoLine*/);
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.SingleSort(false);
	exgrid1.SortBarVisible(true);
	exgrid1.AllowGroupBy(true);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(1)); com_Column = var_Column;
	com_Column.SortOrder(true);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column = var_Column;
		com_Column.FormatColumn("(0:= (1 rpos '')) left ( ( 1:= ( =:0 lfind `.` ) ) != -1 ? =:1 : len(=:0))");
		com_Column.Visible(false);
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column1 = var_Column1;
		com_Column1.FormatColumn("(1 rpos '') contains '.'");
		com_Column1.Visible(false);
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("%C14 = 0"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(190,190,190));
	exgrid1.EndUpdate();
}
941
The BackColorAlternate displays each second row with a different background color. Is it possible to apply a different background color, for each sub-tree, ConditionalFormats, Add

// LayoutChanged event - Occurs when column's position or column's size is changed.
void onEvent_LayoutChanged()
{
	;
	exgrid1.Refresh();
}

// Sort event - Fired when the control sorts a column.
void onEvent_Sort()
{
	;
	exgrid1.Refresh();
}

public void init()
{
	COM com_Column,com_Column1,com_Column2,com_ConditionalFormat,com_Items;
	anytype var_Column,var_Column1,var_Column2,var_ConditionalFormat,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("P1")); com_Column = var_Column;
		com_Column.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
		com_Column.PartialCheck(true);
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("P2")); com_Column1 = var_Column1;
		com_Column1.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
		com_Column1.PartialCheck(true);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root 1");
		com_Items.InsertItem(h,,"Child 1");
		com_Items.InsertItem(h,,"Child 2");
		com_Items.ExpandItem(h,true);
		h = com_Items.AddItem("Root 2");
		com_Items.InsertItem(h,,"Child 1");
		com_Items.InsertItem(h,,"Child 2");
		com_Items.ExpandItem(h,true);
		h = com_Items.AddItem("Root 2");
		com_Items.InsertItem(h,,"Child 1");
		com_Items.InsertItem(h,,"Child 2");
		com_Items.ExpandItem(h,true);
	var_Column2 = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column2 = var_Column2;
		com_Column2.FormatColumn("(0:= (1 rpos '')) left ( ( 1:= ( =:0 lfind `.` ) ) != -1 ? =:1 : len(=:0))");
		com_Column2.Visible(false);
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("(%C2 mod 2) != 0"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(240,240,240));
	exgrid1.EndUpdate();
}
940
The BackColorAlternate displays each second row with a different background color. Is it possible to apply a different background color, for 2nd, 3rd, 4th, row, and so on

// LayoutChanged event - Occurs when column's position or column's size is changed.
void onEvent_LayoutChanged()
{
	;
	exgrid1.Refresh();
}

// Sort event - Fired when the control sorts a column.
void onEvent_Sort()
{
	;
	exgrid1.Refresh();
}

public void init()
{
	COM com_Column,com_ConditionalFormat,com_rs;
	anytype rs,var_Column,var_ConditionalFormat;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HasLines(0/*exNoLine*/);
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column = var_Column;
		com_Column.FormatColumn("1 apos ''");
		com_Column.Visible(false);
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("(%C13 mod 5) = 1"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(128,128,128));
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("(%C13 mod 5) = 2"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(164,164,164));
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("(%C13 mod 5) = 3"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(190,190,190));
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("(%C13 mod 5) = 4"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(240,240,240));
	exgrid1.EndUpdate();
}
939
The BackColorAlternate displays each second row with a different background color. The question I have it is possible to apply a different background color for 3rd, 4th, row, and so on

// LayoutChanged event - Occurs when column's position or column's size is changed.
void onEvent_LayoutChanged()
{
	;
	exgrid1.Refresh();
}

// Sort event - Fired when the control sorts a column.
void onEvent_Sort()
{
	;
	exgrid1.Refresh();
}

public void init()
{
	COM com_Column,com_ConditionalFormat,com_rs;
	anytype rs,var_Column,var_ConditionalFormat;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HasLines(0/*exNoLine*/);
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column = var_Column;
		com_Column.FormatColumn("1 apos ''");
		com_Column.Visible(false);
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("(%C13 mod 4) = 0"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(240,240,240));
	exgrid1.EndUpdate();
}
938
The BackColorAlternate looks fine for flat tables, but how about using it when displaying a hierarchy/tree, like grouping rows. The sample alternate colors for each group found

// LayoutChanged event - Occurs when column's position or column's size is changed.
void onEvent_LayoutChanged()
{
	;
	exgrid1.Refresh();
}

public void init()
{
	COM com_Column,com_ConditionalFormat,com_rs;
	anytype rs,var_Column,var_ConditionalFormat;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.HasLines(0/*exNoLine*/);
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.SingleSort(false);
	exgrid1.SortBarVisible(true);
	exgrid1.AllowGroupBy(true);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(1)); com_Column = var_Column;
	com_Column.SortOrder(true);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Position")); com_Column = var_Column;
		com_Column.FormatColumn("(0:= (1 rpos '')) left ( ( 1:= ( =:0 lfind `.` ) ) != -1 ? =:1 : len(=:0))");
		com_Column.Visible(false);
	var_ConditionalFormat = COM::createFromObject(exgrid1.ConditionalFormats()).Add("(%C13 mod 2) != 0"); com_ConditionalFormat = var_ConditionalFormat;
	com_ConditionalFormat.BackColor(WinApi::RGB2int(240,240,240));
	exgrid1.EndUpdate();
}
937
I need to display sub-totals in the grouping items. Is there any solution on this

// AddGroupItem event - Occurs after a new Group Item has been inserted to Items collection.
void onEvent_AddGroupItem(int   _Item)
{
	COM com_Items;
	anytype var_Items;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.ItemDivider(_Item,-1);
		com_Items.EnableItem(_Item,false);
		com_Items.CellValueFormat(_Item,exgrid1.TreeColumnIndex(),1/*exHTML*/);
		com_Items.FormatCell(_Item,exgrid1.TreeColumnIndex(),"%1");
		com_Items.CellValueFormat(_Item,"Freight",5/*exTotalField | exHTML*/);
		com_Items.CellValue(_Item,"Freight","sum(current,dir,%6)");
		com_Items.FormatCell(_Item,"Freight","`<b>` + currency(value)");
}

public void init()
{
	COM com_Column,com_Items,com_rs;
	anytype rs,var_Column,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.SelBackMode(1/*exTransparent*/);
	exgrid1.BackColorSortBar(WinApi::RGB2int(240,240,240));
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.SortBarVisible(true);
	exgrid1.SortBarCaption("Drag a <b>column</b> header here to group by that column.");
	exgrid1.AllowGroupBy(true);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(1)); com_Column = var_Column;
	com_Column.SortOrder(1/*SortAscending*/);
	exgrid1.LinesAtRoot(5/*exGroupLinesOutside*/);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item("ShipVia"); com_Column = var_Column;
	com_Column.DisplayFilterButton(true);
	exgrid1.EndUpdate();
}
936
I use a subtotal in exTop-Item, after grouping the item shows 0. What is the solution

public void init()
{
	COM com_Column,com_Items,com_rs;
	anytype rs,var_Column,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.SingleSort(false);
	exgrid1.AllowGroupBy(true);
	exgrid1.SortBarVisible(true);
	exgrid1.BackColorSortBar(exgrid1.BackColor());
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(5)); com_Column = var_Column;
	com_Column.SortOrder(1/*SortAscending*/);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(6)); com_Column = var_Column;
	com_Column.FormatColumn("currency(value)");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.LockedItemCount(0/*exTop*/,1);
		h = com_Items.LockedItem(0/*exTop*/,0);
		com_Items.ItemBackColor(h,WinApi::RGB2int(240,240,240));
		com_Items.CellBackColor(h,COMVariant::createFromInt(6),WinApi::RGB2int(190,190,190));
		com_Items.CellValue(h,COMVariant::createFromInt(6),"sum(all,rec,%6)");
		com_Items.CellValueFormat(h,COMVariant::createFromInt(6),4/*exTotalField*/);
	exgrid1.Refresh();
	exgrid1.EndUpdate();
}
935
I would like to avoid manual typing in the date-cell because user often type wrong things (no decimal points and so on) and so the todays-date is generated for the cell. What can be done

// KeyPress event - Occurs when the user presses and releases an ANSI key.
void onEvent_KeyPress(COMVariant /*short*/   _KeyAscii)
{
	;
	print( "if .Editying != 0 then" );
	print( exgrid1.Editing() );
	_KeyAscii = 0;
}

public void init()
{
	COM com_Column,com_Columns,com_Editor,com_Items;
	anytype var_Column,var_Columns,var_Editor,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		com_Columns.Add("Tasks");
		var_Column = COM::createFromVariant(com_Columns.Add("Date")); com_Column = var_Column;
			var_Editor = COM::createFromObject(com_Column.Editor()); com_Editor = var_Editor;
			com_Editor.EditType(7/*DateType*/);
			com_Column.Width(128);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem("Item 1"),COMVariant::createFromInt(1),COMVariant::createFromDate(str2Date("9/21/2006",213)));
		com_Items.CellValue(com_Items.AddItem("Item 2"),COMVariant::createFromInt(1),COMVariant::createFromDate(str2Date("12/22/2015",213)));
		com_Items.CellValue(com_Items.AddItem("Item 3"),COMVariant::createFromInt(1),COMVariant::createFromDate(str2Date("1/10/2015",213)));
	exgrid1.EndUpdate();
}
934
The control does not ensure the item to fit the control's client area once the user clicks the cell's button or check box. What can be done
// MouseDown event - Occurs when the user presses a mouse button.
void onEvent_MouseDown(int   _Button,int   _Shift,int   _X,int   _Y)
{
	// Items.EnsureVisibleItem(ItemFromPoint(-1,-1,c,hit))
	;
}

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.TreeColumnIndex(-1);
	exgrid1.SelForeColor(exgrid1.ForeColor());
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Buttons")); com_Column = var_Column;
		com_Column.Alignment(1/*CenterAlignment*/);
		com_Column.Def(2/*exCellHasButton*/,COMVariant::createFromBoolean(true));
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("Button A");
		com_Items.AddItem("Button B");
		com_Items.AddItem("Button C");
	exgrid1.EndUpdate();
}
933
How do you save the index number from a drop down to a database

public void init()
{
	COM com_Column,com_Editor,com_rs;
	anytype rs,var_Column,var_Editor;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item("ShipVia"); com_Column = var_Column;
		com_Column.Def(4/*exCellBackColor*/,COMVariant::createFromInt(15790320));
		com_Column.Position(1);
		com_Column.Width(96);
		var_Editor = com_Column.Editor(); com_Editor = var_Editor;
			com_Editor.EditType(3/*DropDownListType*/);
			com_Editor.AddItem(1,"Speedy Express");
			com_Editor.AddItem(2,"United Package");
			com_Editor.AddItem(3,"Federal Shipping");
	exgrid1.EndUpdate();
}
932
Is there a way to set the column width and have it stay when refreshing using the data source

public void init()
{
	COM com_rs;
	anytype rs;
	str var_s;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	var_s = "gBjAAwAAuABmABpABsAB0ABlAByhoAPIAOEPAA9gYABoABQAgUEg0XN4AOcJicKkpujIAGMcj0gjcGk8QhkQgUOjUEjsfkMFAB2lEnhRihcYjUvnsykQAO8oMkTNEtGg";
	var_s = var_s + "AGUwn0uoEIhUMh0QiUOisXiE7rEyl8jAElokptYAllmpcCtMmjE3mU6jdzrUGoUKttGvFJs90oFPhVRh1Twg4wtaptco9fiMTsdIvcxw1Nkl2hUOlVwlsvnmayFAmtHn";
	var_s = var_s + "ETuWm0lAv+eAGCzFK10zp1QqVUAGOvkvuuSr0YsMUi2Y0tZ4FAztt0FvuNa23Kvt2m0YnMt5No6uxwOq0eP5cGxAAxQAxgAGwAqu/q1blHDsGW49lzPUq9qtko58r8Kr";
	var_s = var_s + "vc/LrPA7LWvw2ChpQ2j7Om7kBPK870hu+6ZQE4SJvmsT6u0x8BOa/iUP8jUANNATUrxAsKIFATvQU8DCL5B7dMWlr1u2gQZvgrsMMrDSyQ4vkcv02T+tEjUcyC1C7uw1";
	var_s = var_s + "kVABISgwSosXq1JLyRm9EaycqqDQuyjisu+0bvY5i3udEMjTIvkuQHFEmzHNkWymwcqtNNkIN2jUbMeGsdMm4j6R/AyZT7IcztC6M+r5Qs2yYvUx0ZOTZypBqBUZPEaM";
	var_s = var_s + "ax71y6+MeTBDdBoFTjjv2z80Oi9a+VJE9HSA01SUlBbw1Ww8sPSqtFNNCdOx3L9AuQx9eVLIlUJbCa+WHVrV0fYUEMBF06UqAFh0xLLCT7abHV7P8MuNQUnW3YlDuglr";
	var_s = var_s + "fNNcVlrzV6s3FWVKMfcVrPSq6rva0wcz8+Ue2/YK+XzQ0QUQlt83/JTr2ZdiZYBKNoTm2rH4ZedzSckqGDqAA2tEk7CSQmKEJKgWMY5CmQJlkaZYsAGMY0liFJYqKIDx";
	var_s = var_s + "hSpjCu0vUBQappOgSJZUhlBtTmyJIEqaBZVljRZe8yMZnoMl4SjQRI3qal3U7OjqPpOXNFmIAadCiHIkiDV6RjOla7puFKFnjK5/ta7Z6t6GIYkqEIQ1NmqWgIA=";
	exgrid1.Layout(var_s);
	exgrid1.EndUpdate();
}
931
Is it possible to decode/view the control's Layout property

public void init()
{
	COM com_Print;
	anytype var_Print;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.SingleSort(false);
	exgrid1.Columns().Add("C0");
	COM::createFromVariant(exgrid1.Columns().Add("C1")).SortOrder(1/*SortAscending*/);
	exgrid1.Columns().Add("C2");
	// Add 'exprint.dll(ExPrint.dll)' reference to your project.
	// Add 'ExPrint 1.0 Control Library(ExPrint.dll)' reference to your project.
	var_Print = COM::createFromObject(new EXPRINTLib.exprint()); com_Print = var_Print;
		print( com_Print.Decode64TextW(exgrid1.Layout()) );
	exgrid1.EndUpdate();
}
930
How do I programmatically sort by multiple columns

public void init()
{
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.SingleSort(false);
	exgrid1.Columns().Add("C0");
	exgrid1.Columns().Add("C1");
	exgrid1.Columns().Add("C2");
	exgrid1.Layout("multiplesort=\"C2:1 C1:2 C0:2\"");
	exgrid1.EndUpdate();
}
929
Do you have any Fit-To-Page options when printing the control (W x T, Fit-To )

public void init()
{
	COM com_Print,com_rs;
	anytype rs,var_Print;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	exgrid1.ContinueColumnScroll(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.EndUpdate();
	// Add 'exprint.dll(ExPrint.dll)' reference to your project.
	// Add 'ExPrint 1.0 Control Library(ExPrint.dll)' reference to your project.
	var_Print = COM::createFromObject(new EXPRINTLib.exprint()); com_Print = var_Print;
		com_Print.Options("FitToPage =2 x 1");
		com_Print.PrintExt(exgrid1);
		com_Print.Preview();
}
928
Do you have any Fit-To-Page options when printing the control ( x T, Fit-To Tall )

public void init()
{
	COM com_Print,com_rs;
	anytype rs,var_Print;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	exgrid1.ContinueColumnScroll(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.EndUpdate();
	// Add 'exprint.dll(ExPrint.dll)' reference to your project.
	// Add 'ExPrint 1.0 Control Library(ExPrint.dll)' reference to your project.
	var_Print = COM::createFromObject(new EXPRINTLib.exprint()); com_Print = var_Print;
		com_Print.Options("FitToPage = x 2");
		com_Print.PrintExt(exgrid1);
		com_Print.Preview();
}
927
Do you have any Fit-To-Page options when printing the control ( W x, Fit-To Wide )

public void init()
{
	COM com_Print,com_rs;
	anytype rs,var_Print;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	exgrid1.ContinueColumnScroll(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.EndUpdate();
	// Add 'exprint.dll(ExPrint.dll)' reference to your project.
	// Add 'ExPrint 1.0 Control Library(ExPrint.dll)' reference to your project.
	var_Print = COM::createFromObject(new EXPRINTLib.exprint()); com_Print = var_Print;
		com_Print.Options("FitToPage = 2 x");
		com_Print.PrintExt(exgrid1);
		com_Print.Preview();
}
926
Do you have any Fit-To-Page options when printing the control ( percent view, Adjust-To )

public void init()
{
	COM com_Print,com_rs;
	anytype rs,var_Print;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	exgrid1.ContinueColumnScroll(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.EndUpdate();
	// Add 'exprint.dll(ExPrint.dll)' reference to your project.
	// Add 'ExPrint 1.0 Control Library(ExPrint.dll)' reference to your project.
	var_Print = COM::createFromObject(new EXPRINTLib.exprint()); com_Print = var_Print;
		com_Print.Options("FitToPage = 50%");
		com_Print.PrintExt(exgrid1);
		com_Print.Preview();
}
925
How can I get notified once the user expands a column

// LayoutChanged event - Occurs when column's position or column's size is changed.
void onEvent_LayoutChanged()
{
	;
	print( "Column-Expanded" );
	print( exgrid1.Columns().Item("C0").Expanded() );
}

public void init()
{
	COM com_Column,com_Columns,com_Items;
	anytype var_Column,var_Columns,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ShowFocusRect(false);
	exgrid1.ColumnAutoResize(false);
	exgrid1.DrawGridLines(-1/*exAllLines*/);
	exgrid1.BackColorLevelHeader(exgrid1.BackColor());
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		var_Column = COM::createFromVariant(com_Columns.Add("C0")); com_Column = var_Column;
			com_Column.ExpandColumns("0,1,2");
			com_Column.DisplayExpandButton(true);
		com_Columns.Add("C1");
		com_Columns.Add("C2");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Cell 0.0");
		com_Items.CellValue(h,COMVariant::createFromInt(1),"Cell 0.1");
		com_Items.CellValue(h,COMVariant::createFromInt(2),"Cell 0.2");
		h = com_Items.AddItem("Cell 1.0");
		com_Items.CellValue(h,COMVariant::createFromInt(1),"Cell 1.1");
		com_Items.CellValue(h,COMVariant::createFromInt(2),"Cell 1.2");
	exgrid1.EndUpdate();
}
924
I am using expandable headers, the question is how I can display the column itself, not just the child columns

public void init()
{
	COM com_Column,com_Columns,com_Items;
	anytype var_Column,var_Columns,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	exgrid1.DrawGridLines(-1/*exAllLines*/);
	exgrid1.BackColorLevelHeader(exgrid1.BackColor());
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		var_Column = COM::createFromVariant(com_Columns.Add("C0")); com_Column = var_Column;
			com_Column.ExpandColumns("0,1,2");
			com_Column.DisplayExpandButton(true);
		com_Columns.Add("C1");
		com_Columns.Add("C2");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Cell 0.0");
		com_Items.CellValue(h,COMVariant::createFromInt(1),"Cell 0.1");
		com_Items.CellValue(h,COMVariant::createFromInt(2),"Cell 0.2");
		h = com_Items.AddItem("Cell 1.0");
		com_Items.CellValue(h,COMVariant::createFromInt(1),"Cell 1.1");
		com_Items.CellValue(h,COMVariant::createFromInt(2),"Cell 1.2");
	exgrid1.EndUpdate();
}
923
How do I layout expandable columns

public void init()
{
	COM com_Column,com_Column1,com_Column2,com_Column3,com_Columns;
	anytype var_Column,var_Column1,var_Column2,var_Column3,var_Columns;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ColumnAutoResize(false);
	exgrid1.DrawGridLines(-1/*exAllLines*/);
	exgrid1.BackColorLevelHeader(exgrid1.BackColor());
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		var_Column = COM::createFromVariant(com_Columns.Add("C0")); com_Column = var_Column;
			com_Column.ExpandColumns("1,2");
			com_Column.DisplayExpandButton(true);
		com_Columns.Add("C1");
		com_Columns.Add("C2");
		com_Columns.Add("C3");
		var_Column1 = COM::createFromVariant(com_Columns.Add("C4")); com_Column1 = var_Column1;
			com_Column1.ExpandColumns("5,6");
			com_Column1.DisplayExpandButton(true);
		com_Columns.Add("C5");
		var_Column2 = COM::createFromVariant(com_Columns.Add("C6")); com_Column2 = var_Column2;
			com_Column2.ExpandColumns("6,7");
			com_Column2.DisplayExpandButton(true);
		com_Columns.Add("C7");
	exgrid1.EndUpdate();
	var_Column3 = COM::createFromObject(exgrid1.Columns()).Item("C4"); com_Column3 = var_Column3;
	com_Column3.Expanded(false);
}
922
How do I make the control read-only (method 2)

// Edit event - Occurs just before editing the focused cell.
void onEvent_Edit(int   _Item,int   _ColIndex,COMVariant /*bool*/   _Cancel)
{
	;
	_Cancel = true;
}

public void init()
{
	COM com_Column,com_Editor,com_Editor1,com_Items;
	anytype var_Column,var_Editor,var_Editor1,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Editor = COM::createFromVariant(exgrid1.Columns().Add("Editor")).Editor(); com_Editor = var_Editor;
		com_Editor.EditType(6/*CheckListType*/);
		com_Editor.AddItem(1,"One");
		com_Editor.AddItem(2,"Two");
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Check")); com_Column = var_Column;
		var_Editor1 = com_Column.Editor(); com_Editor1 = var_Editor1;
			com_Editor1.EditType(19/*CheckValueType*/);
			com_Editor1.Option(16/*exCheckValue1*/,COMVariant::createFromInt(2));
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem(COMVariant::createFromInt(1)),COMVariant::createFromInt(1),COMVariant::createFromInt(0));
		com_Items.CellValue(com_Items.AddItem(COMVariant::createFromInt(2)),COMVariant::createFromInt(1),COMVariant::createFromInt(1));
	exgrid1.EndUpdate();
}
921
How do I set a locked check-box

public void init()
{
	COM com_Column,com_Column1,com_Editor,com_Editor1,com_Items;
	anytype var_Column,var_Column1,var_Editor,var_Editor1,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Locked-Check")); com_Column = var_Column;
		var_Editor = com_Column.Editor(); com_Editor = var_Editor;
			com_Editor.EditType(19/*CheckValueType*/);
			com_Editor.Option(16/*exCheckValue1*/,COMVariant::createFromInt(2));
			com_Editor.Locked(true);
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("Unlocked-Check")); com_Column1 = var_Column1;
		var_Editor1 = com_Column1.Editor(); com_Editor1 = var_Editor1;
			com_Editor1.EditType(19/*CheckValueType*/);
			com_Editor1.Option(17/*exCheckValue2*/,COMVariant::createFromInt(1));
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem(COMVariant::createFromInt(1)),COMVariant::createFromInt(1),COMVariant::createFromInt(0));
		com_Items.CellValue(com_Items.AddItem(COMVariant::createFromInt(0)),COMVariant::createFromInt(1),COMVariant::createFromInt(1));
	exgrid1.EndUpdate();
}
920
Does the title of the cell's tooltip supports HTML format

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	str var_s;
	;

	super();

	exgrid1.BeginUpdate();
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("")); com_Column = var_Column;
		com_Column.Caption("");
		com_Column.HTMLCaption("Column");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		var_s = "<c><b><fgcolor=FF0000>Title</fgcolor></b><br>This is bit of text that's shown when the user hovers the cell. This shows the titl";
		var_s = var_s + "e centered with a different color.";
		com_Items.CellToolTip(com_Items.AddItem("tooltip w/h different title"),COMVariant::createFromInt(0),var_s);
	exgrid1.EndUpdate();
}
919
How do I specify a different title for the cell's tooltip

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("")); com_Column = var_Column;
		com_Column.Caption("This is the title");
		com_Column.HTMLCaption("Column");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellToolTip(com_Items.AddItem("tooltip w/h different title"),COMVariant::createFromInt(0),"This is bit of text that's shown when the user hovers the cell.");
	exgrid1.EndUpdate();
}
918
The cell's tooltip displays the column's caption in its title. How can I get ride of that

public void init()
{
	COM com_Column,com_Columns,com_Items;
	anytype var_Column,var_Columns,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		com_Columns.Add("C1");
		com_Columns.Add("C2");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("tooltip w/h caption");
		com_Items.CellToolTip(h,COMVariant::createFromInt(0),"This is bit of text that's shown when the user hovers the cell. This shows the column's caption in the title.");
		com_Items.CellValue(h,COMVariant::createFromInt(1),"tooltip no caption");
		com_Items.CellToolTip(h,COMVariant::createFromInt(1),"This is bit of text that's shown when the user hovers the cell. This shows no column's caption in the title.");
	var_Column = COM::createFromObject(exgrid1.Columns()).Item("C2"); com_Column = var_Column;
		com_Column.HTMLCaption(com_Column.Caption());
		com_Column.Caption("");
	exgrid1.EndUpdate();
}
917
How can I programmatically show the column's filter

// RClick event - Fired when right mouse button is clicked
void onEvent_RClick()
{
	COM com_Column;
	anytype var_Column;
	int i;
	;
	i = exgrid1.ItemFromPoint(-1,-1,c,hit);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(c); com_Column = var_Column;
	com_Column.ShowFilter("-1,-1,128,128");
}

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	int i;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ShowFocusRect(false);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Items ")); com_Column = var_Column;
		com_Column.DisplayFilterPattern(false);
		com_Column.FilterList(9472/*exShowExclude | exShowFocusItem | exShowCheckBox*/);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("Item 1");
		com_Items.AddItem("Item 2");
		com_Items.AddItem("Item 3");
	exgrid1.EndUpdate();
}
916
I want to be able to click on one of the headers, and sort by other column. How can I do that (method 2)

// ColumnClick event - Fired after the user clicks on column's header.
void onEvent_ColumnClick(COM   _Column)
{
	// Column.SortOrder = 1
	COM com_Column;
	anytype var_Column;
	;
	exgrid1.SortOnClick(-1/*exDefaultSort*/);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item("Sort"); com_Column = var_Column;
	com_Column.SortOrder(1/*SortAscending*/);
	exgrid1.SortOnClick(1/*exUserSort*/);
}

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.SortOnClick(1/*exUserSort*/);
	exgrid1.Columns().Add("Items");
	COM::createFromVariant(exgrid1.Columns().Add("Sort")).Visible(false);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem("Item 1 (3)"),COMVariant::createFromInt(1),COMVariant::createFromInt(3));
		com_Items.CellValue(com_Items.AddItem("Item 2 (1)"),COMVariant::createFromInt(1),COMVariant::createFromInt(1));
		com_Items.CellValue(com_Items.AddItem("Item 3 (2)"),COMVariant::createFromInt(1),COMVariant::createFromInt(2));
	exgrid1.EndUpdate();
}
915
I want to be able to click on one of the headers, and sort by other column. How can I do that (method 1)

// ColumnClick event - Fired after the user clicks on column's header.
void onEvent_ColumnClick(COM   _Column)
{
	// Column.SortOrder = 1
	;
	exgrid1.Items().SortChildren(0,"Sort",true);
}

public void init()
{
	COM com_Items;
	anytype var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.SortOnClick(1/*exUserSort*/);
	exgrid1.Columns().Add("Items");
	COM::createFromVariant(exgrid1.Columns().Add("Sort")).Visible(false);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem("Item 1 (3)"),COMVariant::createFromInt(1),COMVariant::createFromInt(3));
		com_Items.CellValue(com_Items.AddItem("Item 2 (1)"),COMVariant::createFromInt(1),COMVariant::createFromInt(1));
		com_Items.CellValue(com_Items.AddItem("Item 3 (2)"),COMVariant::createFromInt(1),COMVariant::createFromInt(2));
	exgrid1.EndUpdate();
}
914
How can I highlight the cell's button with a different appearance, when cursor hovers it

public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.VisualAppearance().Add(1,"c:\\exontrol\\images\\normal.ebn");
	exgrid1.DefaultItemHeight(22);
	exgrid1.TreeColumnIndex(-1);
	exgrid1.SelForeColor(WinApi::RGB2int(0,0,0));
	exgrid1.SelBackColor(exgrid1.BackColor());
	exgrid1.Background(157/*exCursorHoverCellButton*/,0x1000000);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Buttons")); com_Column = var_Column;
		com_Column.Def(2/*exCellHasButton*/,COMVariant::createFromBoolean(true));
		com_Column.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
		com_Column.Alignment(1/*CenterAlignment*/);
		com_Column.HeaderAlignment(1/*CenterAlignment*/);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("Button <b>1</b>");
		com_Items.AddItem("Button <b>2</b>");
		com_Items.AddItem("Button <b>3</b>");
	exgrid1.EndUpdate();
}
913
How can I prevent highlighting the cell's button while cursor hovers it

// AddItem event - Occurs after a new Item has been inserted to Items collection.
void onEvent_AddItem(int   _Item)
{
	COM com_Items;
	anytype var_Items;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(_Item,COMVariant::createFromInt(0),"Button <b>A</b>");
		com_Items.CellValue(_Item,COMVariant::createFromInt(1),"Button <b>B</b>");
}

public void init()
{
	COM com_Column,com_Column1,com_Items;
	anytype var_Column,var_Column1,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.DefaultItemHeight(22);
	exgrid1.TreeColumnIndex(-1);
	exgrid1.SelForeColor(WinApi::RGB2int(0,0,0));
	exgrid1.SelBackColor(exgrid1.BackColor());
	exgrid1.Background(157/*exCursorHoverCellButton*/,-1);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("A")); com_Column = var_Column;
		com_Column.Def(2/*exCellHasButton*/,COMVariant::createFromBoolean(true));
		com_Column.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
		com_Column.Alignment(1/*CenterAlignment*/);
		com_Column.HeaderAlignment(1/*CenterAlignment*/);
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("B")); com_Column1 = var_Column1;
		com_Column1.Def(2/*exCellHasButton*/,COMVariant::createFromBoolean(true));
		com_Column1.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
		com_Column1.Alignment(1/*CenterAlignment*/);
		com_Column1.HeaderAlignment(1/*CenterAlignment*/);
	COM::createFromVariant(exgrid1.Columns().Add("")).Position(1);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellEnabled(com_Items.AddItem(""),COMVariant::createFromInt(1),false);
		com_Items.AddItem("");
		com_Items.AddItem("");
	exgrid1.EndUpdate();
}
912
How can I change the image of the icon while performing OLE Drag and Drop

// OLEStartDrag event is not supported. Use the DragEnter,DragLeave,DragOver, DragDrop ... events.
public void init()
{
	COM com_Appearance,com_Items;
	anytype var_Appearance,var_Items;
	str var_s,var_s1;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.OLEDropMode(1/*exOLEDropManual*/);
	exgrid1.ColumnAutoResize(false);
	exgrid1.DefaultItemHeight(22);
	exgrid1.HeaderHeight(exgrid1.DefaultItemHeight());
	COM::createFromVariant(exgrid1.Columns().Add("Default")).Width(128);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("Item 1");
		com_Items.AddItem("Item 2");
		com_Items.AddItem("Item 3");
		com_Items.AddItem("Item 4");
		com_Items.AddItem("Item 5");
	var_Appearance = exgrid1.VisualAppearance(); com_Appearance = var_Appearance;
		var_s = "gBFLBCJwBAEHhEJAAChABakMACAADACAxRDQNABQKAAzQFAYaBiG6GAAGEaRYgmFgAQhFcZQSKUOQTDKMIziYBYfgkMIgSbJUgDGAkRRdDSOYDmGQYDiCIoRShOMIjHL";
		var_s = var_s + "UXxtDaIZwhEAoJb+RgAUY/cTzaAEUwHHiTKInaCQIhsC4JUJAdRURQ9EwvCIZBpEWwLChENQwWLCNj2TScBwjCyqbale45ViqdoDU8lORLUi+M4zSBPcZVTRtGShPDBK";
		var_s = var_s + "TjMLaYgkIIlVpRNa0PC1GTzQ6mazkKQLRADDIDVbAeL3LiMBy9LyLLItQALByua5mWhbcZyBCOPgBTrRb5zO58FjuTK7YLjMB7NrUNYtFaUMy2OpOCADIaecTNcaWLxP";
		var_s = var_s + "F2MY1HWYxVj2Jw3DuRJonKYB5lKAYkkYdA6hyDIjBkApaFoAAhBMfYxiGNAkFECZnm4YQBgiOgDl2URSE4KAEj2AJKigFgGgGYIIAyPQ6CCRogAAOxhAMSgSDgIRDhYF";
		var_s = var_s + "oFmGCBmBQOAMjgdgQDsUITEIIg5iISAEmIOBigiJgqgqYhoFyVILyyMgyDmYxDg4rBjgiZg6g0Dh4kiTIMGMKAwmgOQkEkFhGhGZIJAoPoQAyQ4mE6BhlAkRgXhODoZC";
		var_s = var_s + "0A4Pg6KRmCSFplkkdheDmJYTioVgACOY4uGaDwmgmJhqg8JlWmOGRmGkChyhyZxJAobYbmMI4yHqFQnkmdh+2RYp4DMIZ5gaBohmiCYGB+IJOmoNhtiPXZGG2I1tgyb4";
		var_s = var_s + "lmgGhmhqJt0Fyb4gk8CtsCiahKhYH4oXiAohiUKpKjaLt+goDJxiyaZqlaNot4OTJx3gKp2iiL5sAsBoov+KgMnOMZrisJpKjLjocnPeBLEaRI0m0SxWkSNBPEoDJ1ja";
		var_s = var_s + "bJrHaXo35obOZC2OximaOZugsYpi3ga42mKO5vAuRpijsTxqAyd49m8S5mnqPuqFyd4gk+DAGn6QJwEwFp+kAT+BnmQpwgwNwOkPtYsnnrgsFcEpFnGDBnBKRRPiwUwc";
		var_s = var_s + "kecgMgcIpHGMKQwnuSZygyJ1/HKOgMnyS5zAyRwykycw5g4Eg0jCA57DqTpzkydw+kIDR9AUCY9A2HQXBIUh0g0JRJ5aUxmnQZIPnkUgvDUI5tFcVoPjUOB+A4QBAICA";
		com_Appearance.Add(1,COMVariant::createFromStr(var_s));
		var_s1 = "gBFLBCJwBAEHhEJAAChABC8MACAADACAxRDQNABQKAAzQFAYaBiG6GAAGEaRYgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXI";
		var_s1 = var_s1 + "UBxAAqXZZFUaKAgOMJDTLBAzUTCQbR7HiQYyBeCQOo+VoaSACEIlAZJRjoOo5DJGGQILlQJqyYrpaAxIgkEJuTqGoQaXgle53PJeLpXW5Nez9P7AMBwK7bbaqeTyXa+e";
		var_s1 = var_s1 + "DtJhif4cXjIMhyLI8UxXEKOL7jDSYPgqK48QhCEJQPQ9EyXJqnahoemCeRXBZ+aqxbBsCwCep0YBeNr3HaNaz3PK/brtWxMDpeA5IYhhF7WdZFR4tMrOdAtHL9FyPJ5T";
		var_s1 = var_s1 + "FicgXnoTAKAsRpHPeVhrAUd4LkmY5yj+fQ+i8L4zk+Y5vjCe4oD6ZoNhSRxiisVRKg+T5vnWfB6h6J5yAIf4fieWJFHyHZHHSTAygyAociMKBKEKBIeCiCZyHYFAnCAB";
		var_s1 = var_s1 + "4mBeBQJlgRIegOCgYCySAgh2WAkgINAMmMNIgCcCYoGYLoLmKaIshqCgMliEICgmDRDEiUQmkmAhWDCD5inicIVg4TQYloJg2g2ExYhoJZJEidIThMCQSFyEwkGKaRKF";
		var_s1 = var_s1 + "EJQJBkOhLCUJIDFoRiKBmBJhDeDZZDoPAlgmQhghaGZimmHhphqZopDoYw3GYEgFgGHROGOFJkCSSQCDoTAkiSaQ6C6IBJFkPIUCSJ5CDoeQ5CcVZ5gWHROmONJsCMSI";
		var_s1 = var_s1 + "SByEFyjIRoYiaKYaG6HonEiOhcguJQIHoRJsh0WBWB2JIpiqShKi0OwqnqRouiyTpGhGBxiYIZKOhqGp2j4aRaAqZL3FAECAgA==";
		com_Appearance.Add(2,COMVariant::createFromStr(var_s1));
	exgrid1.Background(33/*exDragDropBefore*/,0x1000000);
	exgrid1.Background(34/*exDragDropAfter*/,0x2000000);
	exgrid1.Background(37/*exDragDropForeColor*/,WinApi::RGB2int(0,0,1));
	exgrid1.EndUpdate();
}
911
How can I sort by two-columns, one by date and one by time

public void init()
{
	COM com_Column,com_Columns,com_Items;
	anytype var_Column,var_Columns,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.SingleSort(false);
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		COM::createFromVariant(com_Columns.Add("Index")).FormatColumn("1 index ``");
		COM::createFromVariant(com_Columns.Add("Date")).SortType(2/*SortDate*/);
		var_Column = COM::createFromVariant(com_Columns.Add("Time")); com_Column = var_Column;
			com_Column.SortType(4/*SortTime*/);
			com_Column.FormatColumn("time(value)");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem(COMVariant::createFromInt(0));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromDate(str2Date("1/1/2001",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromUtcDateTime(str2Datetime("1/1/2001 10:00:00",213)));
		h = com_Items.AddItem(COMVariant::createFromInt(0));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromDate(str2Date("12/31/2000",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromUtcDateTime(str2Datetime("1/1/2001 10:00:00",213)));
		h = com_Items.AddItem(COMVariant::createFromInt(0));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromDate(str2Date("1/1/2001",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromUtcDateTime(str2Datetime("1/1/2001 6:00:00",213)));
		h = com_Items.AddItem(COMVariant::createFromInt(0));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromDate(str2Date("12/31/2000",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromUtcDateTime(str2Datetime("1/1/2001 8:00:00",213)));
		h = com_Items.AddItem(COMVariant::createFromInt(0));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromDate(str2Date("1/1/2001",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromUtcDateTime(str2Datetime("1/1/2001 8:00:00",213)));
		h = com_Items.AddItem(COMVariant::createFromInt(0));
		com_Items.CellValue(h,COMVariant::createFromInt(1),COMVariant::createFromDate(str2Date("12/31/2000",213)));
		com_Items.CellValue(h,COMVariant::createFromInt(2),COMVariant::createFromUtcDateTime(str2Datetime("1/1/2001 6:00:00",213)));
	exgrid1.Layout("multiplesort=\"C1:1 C2:1\"");
	exgrid1.EndUpdate();
}
910
How can I display a context menu

// MouseUp event - Occurs when the user releases a mouse button.
void onEvent_MouseUp(int   _Button,int   _Shift,int   _X,int   _Y)
{
	// Items.ToString = "Check[chk],[sep],Item 1,Item 2,Item 3"
	COM com_Object;
	anytype var_Object;
	;
	var_Object = COM::createFromObject(new Object()); com_Object = var_Object;
		;
}

public void init()
{
	COM com_Object,com_rs;
	anytype rs,var_Object;
	;

	super();

	exgrid1.ColumnAutoResize(false);
	exgrid1.ScrollBySingleLine(true);
	exgrid1.ContinueColumnScroll(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.ReadOnly(-1/*exReadOnly*/);
}
909
Also, are there any plans on the ability to put borders on individual cells or rows or columns

public void init()
{
	COM com_Appearance,com_Items;
	COMVariant hx;
	anytype var_Appearance,var_Items;
	int h;
	str var_s,var_s1,var_s2,var_s3;
	;

	super();

	exgrid1.BeginUpdate();
	var_Appearance = exgrid1.VisualAppearance(); com_Appearance = var_Appearance;
		var_s = "gBFLBCJwBAEHhEJAAChABOUGACAADACAxRDQNABQKAAzQFAYbBkGqGAAGIYxYgmFgAQhFcZQSpEEg7BKMYwjOJgFgmEQxDANIBQSKoaQiGQYRhkEYgEiONoaDJCM4wHI";
		var_s = var_s + "MQxHCKTZRkGYpajOPobUbGUywHRcRRvH6EZQGWg6GjqK43SCEEZhJBNGyTJ6BZbGURbCqSLAwWZAYy2RCMRxDJqLKypSwKPoGKosS5OUwzHItaRtHaJJAwKZ6ApGQpRV";
		var_s = var_s + "TAYxVfC1PzkACma4nS7oXraVJFVZTdYwTh+JABTzGLpnKw7FhGa5pABpdq0RTuOZdAbPMoyXBrXqqB46UCOGg5HRWWwHR7ZIquap9JzfCq5cRbWr5BBOPaBYKwdD1CB+";
		var_s = var_s + "iMVRnlQRY4hafZwAMH5Pl4XQnjCEBECSIBpDGHQOicIwtBIBpmiWEIJj6eJQloEgomafgyGGCI6kKYZQH+igGAKAJgEgFgGgGYIFlCf4CmCSA2A6A5hAgRgEgQYRIFYF";
		var_s = var_s + "IEmEaBmBmBghigdgQgcIZogYC4ICIKB6CSCRhiiHgogWIooi4F4AmKaIaDCDBihiTg0gsIIYmYOoOmOSJ2D6AZQBAgI=";
		com_Appearance.Add(1,COMVariant::createFromStr(var_s));
		var_s1 = "gBFLBCJwBAEHhEJAAChABdUIQAAYAQGKIaBoAKBQAGaAoDDYMg1QwAAxDGLEEwsACEIrjKCVIgkHYJRjGEZxNCMIhiGAaQChEZYHgkMomDAOEgyHKcEgJGyEQgkOa4aj";
		var_s1 = var_s1 + "CKYrSzAcrwTI4cRVHiQZygOZ4DBSOY8VBAcQweItJhrKqVRgriitNQjCyjZCpOaIDooAJmRZNNISBBIEQSKA0TDOQ5TSKUMYhOZTBBEbbMNBtBIUIRpajbMBiFywUxUO";
		var_s1 = var_s1 + "JYXhmG4dR7IMhyLI8UxXFo7P7mOZZXjmO49T7Kc70LQ9CyHJKnabpWoaXj2VZZV7Mda2DTNSzPKK1bZpG4bTouKZ5WjfN72fgeCzrF7HchyPJcXxnG4ZAMBA";
		com_Appearance.Add(2,COMVariant::createFromStr(var_s1));
		var_s2 = "gBFLBCJwBAEHhEJAAChABL0GACAADACAxRDQNABQKAAzQFAYbBkGqGAAGIYxYgmFgAQhFcZQSpEEg7BKMYwjOJgEgmEQxDANIBQSKoaQiGQYRhkEYpFiONoXDJCM4wHI";
		var_s2 = var_s2 + "MQxHCKTZRkGYpajOPobUbGUygBRdExvEyEZQGWg6GjqK43SCEEZhJBNGyfH6dBpEWT7ChENQwWLLFoRDIcQyXCytIDter4boGKosS5OUwzGAtaRvHaJJAwKZ6ApGQpRV";
		var_s2 = var_s2 + "TAYxUdC1HTjJiEa4nS7oXraVJFVZTdYwTh+JABTzGKbsSycKqWaqkABZeoWbTuOZdAbPMoyXBrXgOLYzUCOGg5HRWWwHR7ZIq0Pg9Hqaa4bVbIVxbcAGH6BQa6J5hEBE";
		var_s2 = var_s2 + "CSIBpDGHQOicIwtBIBpmhqEIJj2eJQloEgokiegyGGCI6kKZ5BnefA+D8L4flOa52nufg+g+f5fnPFB/ooBZ1omSAWASAJgGgJgJgIIIoDYAIDCCaBFnuBAhCgOgUgUY";
		var_s2 = var_s2 + "IoF4GIBiGKBuAcfohmgNgdggX54g4JB/F+GImCqCpikiNguguUAQICA=";
		com_Appearance.Add(3,COMVariant::createFromStr(var_s2));
		var_s3 = "gBFLBCJwBAEHhEJAAChABBUGACAADACAxRDQNABQKAAzQFAYbBkGqGAAGIYxYgmFgAQhFcZQSpEEg7BKMYwjOJgCgmEQxDANMiwGKoaQiGQYRhkEYgFiONoaDJCM4wHI";
		var_s3 = var_s3 + "MQxHCKTZRkGYpajOPobUbAYQQSAkEgpECbZqoEZaDoaOorTZINJ0VR1Ox5KKfZyGURZPqOEQ1DBZEI2RZUbxDJquLhACj7AjeZZtRJZVp2TY9eQ3LC3aYhGqwAwSFpJV";
		var_s3 = var_s3 + "jUEBgRBJIDSMY6DpOIxaEgNZpwEITOTxUK0EhRLy5agDCJ1QrCdanahqOpaXpmW5dV7YNh2LTnfzXNq3bhuO5bXqOd59X7fN54Dg+D4LRLHbpxXIcXqvFaZZDnOb4ToP";
		var_s3 = var_s3 + "EuAZUmqcB2B2DoHGuN5Tm6d46lsPwfhOS5mnOeg9DqCAIICA";
		com_Appearance.Add(4,COMVariant::createFromStr(var_s3));
	exgrid1.LinesAtRoot(1/*exGroupLinesAtRoot*/);
	exgrid1.SelBackColor(exgrid1.BackColor());
	exgrid1.SelForeColor(exgrid1.ForeColor());
	exgrid1.DefaultItemHeight(22);
	exgrid1.Columns().Add("");
	COM::createFromVariant(exgrid1.Columns().Add("")).Def(4/*exCellBackColor*/,COMVariant::createFromInt(33554432));
	exgrid1.Columns().Add("");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Root 1");
		com_Items.ItemBackColor(h,0x1000000);
		hx = com_Items.SplitCell(h,COMVariant::createFromInt(0));
		com_Items.CellValue(COMVariant::createFromInt(0),hx,"count(current,dir,1)");
		com_Items.CellValueFormat(COMVariant::createFromInt(0),hx,4/*exTotalField*/);
		com_Items.FormatCell(COMVariant::createFromInt(0),hx,"'Childs: ' + value");
		com_Items.CellBackColor(COMVariant::createFromInt(0),hx,0x3000000);
		com_Items.CellHAlignment(COMVariant::createFromInt(0),hx,1/*CenterAlignment*/);
		com_Items.InsertItem(h,,"Child 1");
		com_Items.InsertItem(h,,"Child 2");
		com_Items.ExpandItem(h,true);
		h = com_Items.AddItem("Root 2");
		com_Items.ItemBackColor(h,0x4000000);
		hx = com_Items.SplitCell(h,COMVariant::createFromInt(0));
		com_Items.CellValue(COMVariant::createFromInt(0),hx,"count(current,dir,1)");
		com_Items.CellValueFormat(COMVariant::createFromInt(0),hx,4/*exTotalField*/);
		com_Items.FormatCell(COMVariant::createFromInt(0),hx,"'Childs: ' + value");
		com_Items.CellBackColor(COMVariant::createFromInt(0),hx,0x3000000);
		com_Items.CellHAlignment(COMVariant::createFromInt(0),hx,1/*CenterAlignment*/);
		com_Items.InsertItem(h,,"Child 1");
		com_Items.InsertItem(h,,"Child 2");
		com_Items.InsertItem(h,,"Child 3");
		com_Items.ItemBackColor(com_Items.InsertItem(h,,"Child 4"),0x4000000);
	exgrid1.EndUpdate();
}
908
How can I decode the Layout property
public void init()
{
	COM com_Column,com_Columns,com_Items,com_Print;
	anytype var_Column,var_Columns,var_Items,var_Print;
	;

	super();

	exgrid1.BeginUpdate();
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		com_Columns.Add("C1");
		COM::createFromVariant(com_Columns.Add("C2")).Position(1);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem("SubItem 1.1"),COMVariant::createFromInt(1),"SubItem 1.2");
		com_Items.CellValue(com_Items.AddItem("SubItem 2.1"),COMVariant::createFromInt(1),"SubItem 2.2");
	var_Column = COM::createFromObject(exgrid1.Columns()).Item("C2"); com_Column = var_Column;
	com_Column.SortOrder(2/*SortDescending*/);
	exgrid1.EndUpdate();
	print( "Encoded:" );
	print( exgrid1.Layout() );
	// Add 'exprint.dll(ExPrint.dll)' reference to your project.
	// Add 'ExPrint 1.0 Control Library(ExPrint.dll)' reference to your project.
	var_Print = COM::createFromObject(new EXPRINTLib.exprint()); com_Print = var_Print;
		print( "Decoded: " );
		print( com_Print.Decode64TextW(exgrid1.Layout()) );
}
907
No new line is shown if using <br> tag. How can I show a new line with-in the cell

public void init()
{
	COM com_Column,com_Column1,com_Items;
	anytype var_Column,var_Column1,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ScrollBySingleLine(true);
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("Single-Line")); com_Column = var_Column;
		com_Column.Def(16/*exCellSingleLine*/,COMVariant::createFromBoolean(true));
		com_Column.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
	var_Column1 = COM::createFromVariant(exgrid1.Columns().Add("Multiple-Lines")); com_Column1 = var_Column1;
		com_Column1.Def(16/*exCellSingleLine*/,COMVariant::createFromBoolean(false));
		com_Column1.Def(17/*exCellValueFormat*/,COMVariant::createFromInt(1));
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.CellValue(com_Items.AddItem("First-Line<br>Second-Line"),COMVariant::createFromInt(1),"First-Line<br>Second-Line");
		h = com_Items.AddItem("First-Line<br>Second-Line<br>Third-Line");
		com_Items.CellSingleLine(h,false);
		com_Items.CellHAlignment(h,COMVariant::createFromInt(0),1/*CenterAlignment*/);
		com_Items.ItemDivider(h,0);
	exgrid1.EndUpdate();
}
906
I am using exCRD to layout the columns in the grid, but is there a way where I can have the text in a cell wrap if it's exceeds the width of the cell instead of showing the ...'s

public void init()
{
	COM com_Column,com_Column1,com_Column2,com_Column3,com_Column4,com_Columns,com_Editor,com_Items;
	anytype var_Column,var_Column1,var_Column2,var_Column3,var_Column4,var_Columns,var_Editor,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.DrawGridLines(-2/*exRowLines*/);
	exgrid1.DefaultItemHeight(36);
	exgrid1.FullRowSelect(0/*exColumnSel*/);
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		var_Column = COM::createFromVariant(com_Columns.Add("Column1")); com_Column = var_Column;
			com_Column.Visible(false);
			var_Editor = COM::createFromObject(com_Column.Editor()); com_Editor = var_Editor;
			com_Editor.EditType(1/*EditType*/);
		var_Column1 = COM::createFromVariant(com_Columns.Add("Column2")); com_Column1 = var_Column1;
			com_Column1.Visible(false);
			var_Editor = COM::createFromObject(com_Column1.Editor()); com_Editor = var_Editor;
			com_Editor.EditType(1/*EditType*/);
		var_Column2 = COM::createFromVariant(com_Columns.Add("Column3")); com_Column2 = var_Column2;
			com_Column2.Visible(false);
			com_Column2.Def(16/*exCellSingleLine*/,COMVariant::createFromBoolean(false));
			var_Editor = COM::createFromObject(com_Column2.Editor()); com_Editor = var_Editor;
			com_Editor.EditType(1/*EditType*/);
		var_Column3 = COM::createFromVariant(com_Columns.Add("Column4")); com_Column3 = var_Column3;
			com_Column3.Alignment(1/*CenterAlignment*/);
			com_Column3.HeaderAlignment(1/*CenterAlignment*/);
			com_Column3.Visible(false);
			com_Column3.Def(2/*exCellHasButton*/,COMVariant::createFromBoolean(true));
			com_Column3.Def(3/*exCellButtonAutoWidth*/,COMVariant::createFromBoolean(true));
		var_Column4 = COM::createFromVariant(com_Columns.Add("FormatLevel")); com_Column4 = var_Column4;
			com_Column4.FormatLevel("(0/1),\"Information to be shown on the control's header\"[a=17][ww]:128,3:128");
			com_Column4.Def(32/*exCellFormatLevel*/,"(0/1),2[a=17][ww]:128,3:128");
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Cell 1.1");
		com_Items.CellValue(h,COMVariant::createFromInt(1),"Cell 1.2");
		com_Items.CellValue(h,COMVariant::createFromInt(2),"This is just a bit of information on first row");
		com_Items.CellValue(h,COMVariant::createFromInt(3),"Cell 1.4");
		com_Items.CellSingleLine(h,COMVariant::createFromInt(3),false);
		h = com_Items.AddItem("Cell 2.1");
		com_Items.CellValue(h,COMVariant::createFromInt(1),"Cell 2.2");
		com_Items.CellValue(h,COMVariant::createFromInt(2),"This is just a bit of information on second row");
		com_Items.CellValue(h,COMVariant::createFromInt(3),"Cell 2.4");
	exgrid1.EndUpdate();
}
905
How can I load pictures using URL ( http:// )
public void init()
{
	COM com_http;
	anytype http;
	;

	super();

	// Add 'exhttp.dll(ExHTTP.dll)' reference to your project.
	// Add 'ExHTTP 1.0 Control Library(ExHTTP.dll)' reference to your project.
	http = COM::createFromObject(new EXHTTPLib.exhttp()); com_http = http;
	exgrid1.PictureDisplay(34/*LowerRight*/);
	exgrid1.Picture(http.GETImage("http://mail.exontrol.com/images/exontrol.png"));
}
904
How can I filter programmatically by multiple columns
public void init()
{
	COM com_Column,com_Column1,com_Column2,com_Column3,com_Columns,com_Items;
	anytype var_Column,var_Column1,var_Column2,var_Column3,var_Columns,var_Items;
	int h;
	;

	super();

	exgrid1.BeginUpdate();
	var_Columns = exgrid1.Columns(); com_Columns = var_Columns;
		com_Columns.Add("Name");
		var_Column = COM::createFromVariant(com_Columns.Add("Active")); com_Column = var_Column;
			com_Column.Def(0/*exCellHasCheckBox*/,COMVariant::createFromBoolean(true));
			com_Column.DisplayFilterButton(true);
		com_Columns.Add("Type");
		COM::createFromVariant(com_Columns.Add("Mode")).FilterType(240/*exFilter*/);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		h = com_Items.AddItem("Item A");
		com_Items.CellState(h,COMVariant::createFromInt(1),1);
		com_Items.CellValue(h,COMVariant::createFromInt(2),"A");
		h = com_Items.AddItem("Item B");
		com_Items.CellState(h,COMVariant::createFromInt(1),0);
		com_Items.CellValue(h,COMVariant::createFromInt(2),"B");
		h = com_Items.AddItem("Item C");
		com_Items.CellState(h,COMVariant::createFromInt(1),1);
		com_Items.CellValue(h,COMVariant::createFromInt(2),"C");
		com_Items.CellValue(h,COMVariant::createFromInt(3),"None");
		h = com_Items.AddItem("Item D");
		com_Items.CellState(h,COMVariant::createFromInt(1),1);
		com_Items.CellValue(h,COMVariant::createFromInt(2),"C");
	var_Column1 = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(1)); com_Column1 = var_Column1;
		com_Column1.FilterType(6/*exCheck*/);
		com_Column1.Filter(1);
	var_Column2 = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(2)); com_Column2 = var_Column2;
		com_Column2.FilterType(240/*exFilter*/);
		com_Column2.Filter("C");
	var_Column3 = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(3)); com_Column3 = var_Column3;
		com_Column3.FilterType(2/*exNonBlanks*/);
	exgrid1.ApplyFilter();
	exgrid1.EndUpdate();
}
903
How can I add Right-To-Left Reading-Order / RTL Layout
public void init()
{
	COM com_Column,com_Items;
	anytype var_Column,var_Items;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.TreeColumnIndex(-1);
	var_Column = COM::createFromVariant(exgrid1.Columns().Add("RTL - Header Caption")); com_Column = var_Column;
		com_Column.HeaderAlignment(131074/*0x20002 | RightAlignment*/);
		com_Column.Alignment(131074/*0x20002 | RightAlignment*/);
	exgrid1.FullRowSelect(0/*exColumnSel*/);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("RTL - Text Right");
		com_Items.CellHAlignment(com_Items.AddItem("RTL - Text Center"),COMVariant::createFromInt(0),131073/*0x20001 | CenterAlignment*/);
		com_Items.CellHAlignment(com_Items.AddItem("RTL - Text Left"),COMVariant::createFromInt(0),131072);
	exgrid1.EndUpdate();
}
902
I have applied ebn to the grid using the following code, and noticed that it applies to the filter dropdownList too. Is there a way to prevent this behavior, like keeping the Filter dropdownlist intact

public void init()
{
	COM com_Items;
	anytype var_Items;
	;

	super();

	exgrid1.VisualAppearance().Add(1,"c:\\exontrol\\images\\normal.ebn");
	exgrid1.Appearance(16777216);
	exgrid1.BackColorHeader(0x1000000);
	exgrid1.Background(26/*exBackColorFilter*/,0x8000000f);
	COM::createFromVariant(exgrid1.Columns().Add("Filter")).DisplayFilterButton(true);
	var_Items = exgrid1.Items(); com_Items = var_Items;
		com_Items.AddItem("Item 1");
		com_Items.AddItem("Item 2");
}
901
The tree lines from the group parent to its children are missing and no identation is present: the parent and all its children are on the same offset from left. What canbe done

// AddGroupItem event - Occurs after a new Group Item has been inserted to Items collection.
void onEvent_AddGroupItem(int   _Item)
{
	COM com_Items;
	anytype var_Items;
	int nGroupColumn;
	;
	var_Items = exgrid1.Items(); com_Items = var_Items;
		nGroupColumn = com_Items.GroupItem(_Item);
		com_Items.ItemDivider(_Item,-1);
		com_Items.FormatCell(_Item,COMVariant::createFromInt(0),com_Items.FormatCell(_Item,nGroupColumn));
		com_Items.CellValue(_Item,COMVariant::createFromInt(0),COMVariant::createFromStr(exgrid1.Columns().Item(nGroupColumn).GroupByTotalField()));
		com_Items.CellValueFormat(_Item,COMVariant::createFromInt(0),com_Items.CellValueFormat(_Item,nGroupColumn));
}

public void init()
{
	COM com_Column,com_Column1,com_Items,com_rs;
	anytype rs,var_Column,var_Column1,var_Items;
	int nGroupColumn;
	;

	super();

	exgrid1.BeginUpdate();
	exgrid1.ReadOnly(-1/*exReadOnly*/);
	exgrid1.ColumnAutoResize(false);
	// Add 'Microsoft ActiveX Data Objects 6.1 Library(msado15.dll)' reference to your project.
	rs = COM::createFromObject(new ADODB.Recordset()); com_rs = rs;
		rs.Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\Exontrol\\ExGrid\\Sample\\Access\\misc.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/);
	exgrid1.DataSource(rs);
	exgrid1.SortBarVisible(true);
	exgrid1.SortBarCaption("Drag a <b>column</b> header here to group by that column.");
	exgrid1.AllowGroupBy(true);
	var_Column = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(0)); com_Column = var_Column;
		com_Column.AllowGroupBy(false);
		com_Column.Width(96);
	var_Column1 = COM::createFromObject(exgrid1.Columns()).Item(COMVariant::createFromInt(1)); com_Column1 = var_Column1;
	com_Column1.SortOrder(1/*SortAscending*/);
	exgrid1.LinesAtRoot(-1/*exLinesAtRoot*/);
	exgrid1.EndUpdate();
}